C语言经典算法实例7:完数

完全数(Perfect number),又称完美数或完备数,是一些特殊的自然数。
它所有的真因子(即除了自身以外的约数)的和(即因子函数),恰好等于它本身。
如果一个数恰好等于它的真因子之和,则称该数为“完全数”。
第一个完全数是6,第二个完全数是28,第三个完全数是496,后面的完全数还有8128、33550336等等。
如果一个数恰好等于它的真因子之和,则称该数为“完全数” 。各个小于它的约数(真约数,列出某数的约数,去掉该数本身,剩下的就是它的真约数)的和等于它本身的自然数叫做完全数(Perfect number),又称完美数或完备数。
例如:
第一个完全数是6,它有约数1、2、3、6,除去它本身6外,其余3个数相加,1+2+3=6。
第二个完全数是28,它有约数1、2、4、7、14、28,除去它本身28外,其余5个数相加,1+2+4+7+14=28。
第三个完全数是496,有约数1、2、4、8、16、31、62、124、248、496,除去其本身496外,其余9个数相加,1+2+4+8+16+31+62+124+248=496。
后面的完全数还有8128、33550336等等。
本文完数
问题的描述
如下几点所示
本文C语言经典算法实例的编译环境,使用的是集成开发环境:Visual Studio 2019

Visual Studio 2019官网链接如下
Visual Studio 2019集成的开发环境的特点有
包含头文件 代码如下所示
#pragma once
// 包含头文件
#include <stdio.h>
#include <stdlib.h>
声明变量 代码如下所示
// 声明变量
int i, j, k;
使用for循环来求1-10000的完数 代码如下所示
/// <summary>
/// 使用for循环来求1-10000的完数
/// </summary>
/// <returns>无</returns>
for (i = 1; i < 10000; i++)
{
}
变量赋值 代码如下所示
// 变量赋值, 保证每次循环时sum的初值为0
int sum = 0;

判断j是否为i的因子,代码如下所示
for (j = 1; j < i; j++)
{
/// <summary>
/// // 判断j是否为i的因子
/// </summary>
/// <returns></returns>
if (i % j == 0)
{
sum += j;
}
}
判断因子数是否和原数相等 代码如下所示
/// <summary>
/// 判断因子数的和是否和原数相等
/// </summary>
/// <returns></returns>
if (sum == i)
{
printf("%d 的因数是: ", i);
for (k = 1; k < i; k++)
{
if (i % k == 0)
{
printf("%d ", k);
}
}
printf("\n");
}
按F5进行编译,调试结果如下所示。

6 的因数是: 1 2 3
28 的因数是: 1 2 4 7 14
496 的因数是: 1 2 4 8 16 31 62 124 248
8128 的因数是: 1 2 4 8 16 32 64 127 254 508 1016 2032 4064
请按任意键继续. . .
对求1-10000内的完数功能进行函数模块化 代码如下所示。
/// <summary>
/// 求完数的函数声明
/// </summary>
void numberPerfect();
对求1-10000内的完数功能进行函数模块化的函数定义 代码如下所示。
/// <summary>
/// 求完数的函数定义
/// </summary>
void numberPerfect()
{
// 声明变量
int i, j, k;
/// <summary>
/// 使用for循环来求1-10000的完数
/// </summary>
/// <returns>无</returns>
for (i = 1; i < 10000; i++)
{
// 变量赋值, 保证每次循环时sum的初值为0
int sum = 0;
for (j = 1; j < i; j++)
{
/// <summary>
/// // 判断j是否为i的因子
/// </summary>
/// <returns></returns>
if (i % j == 0)
{
sum += j;
}
}
/// <summary>
/// 判断因子数的和是否和原数相等
/// </summary>
/// <returns></returns>
if (sum == i)
{
printf("%d 的因数是: ", i);
for (k = 1; k < i; k++)
{
if (i % k == 0)
{
printf("%d ", k);
}
}
printf("\n");
}
}
printf("\n");
}
主函数中调用求1-10000内的完数功能的函数numberPerfect 代码如下所示
// 调用求完数的函数
numberPerfect();
按F5进行编译,调试结果如下所示。

经典算法实例程序完整代码如下所示
#pragma once
// 包含头文件
#include <stdio.h>
#include <stdlib.h>
/// <summary>
/// 求完数的函数声明
/// </summary>
void numberPerfect();
#define _CRT_SECURE_NO_WARNINGS
#include "Main.h"
/// <summary>
/// 主函数
/// </summary>
/// <returns>返回0</returns>
int main()
{
system("color 3E");
// 调用求完数的函数
numberPerfect();
system("pause");
return 0;
}
/// <summary>
/// 求完数的函数定义
/// </summary>
void numberPerfect()
{
// 声明变量
int i, j, k;
/// <summary>
/// 使用for循环来求1-10000的完数
/// </summary>
/// <returns>无</returns>
for (i = 1; i < 10000; i++)
{
// 变量赋值, 保证每次循环时sum的初值为0
int sum = 0;
for (j = 1; j < i; j++)
{
/// <summary>
/// // 判断j是否为i的因子
/// </summary>
/// <returns></returns>
if (i % j == 0)
{
sum += j;
}
}
/// <summary>
/// 判断因子数的和是否和原数相等
/// </summary>
/// <returns></returns>
if (sum == i)
{
printf("%d 的因数是: ", i);
for (k = 1; k < i; k++)
{
if (i % k == 0)
{
printf("%d ", k);
}
}
printf("\n");
}
}
printf("\n");
}
本文的C语言经典算法实例:完数,要实现的目标如下

文到这里就结束啦。
希望本文的C语言经典算法实例:完数。
能激发你对C语言以及算法学习的热爱。
我正在寻找执行以下操作的正确语法(在Perl、Shell或Ruby中):#variabletoaccessthedatalinesappendedasafileEND_OF_SCRIPT_MARKERrawdatastartshereanditcontinues. 最佳答案 Perl用__DATA__做这个:#!/usr/bin/perlusestrict;usewarnings;while(){print;}__DATA__Texttoprintgoeshere 关于ruby-如何将脚
我正在查看instance_variable_set的文档并看到给出的示例代码是这样做的:obj.instance_variable_set(:@instnc_var,"valuefortheinstancevariable")然后允许您在类的任何实例方法中以@instnc_var的形式访问该变量。我想知道为什么在@instnc_var之前需要一个冒号:。冒号有什么作用? 最佳答案 我的第一直觉是告诉你不要使用instance_variable_set除非你真的知道你用它做什么。它本质上是一种元编程工具或绕过实例变量可见性的黑客攻击
在我的应用程序中,我需要能够找到所有数字子字符串,然后扫描每个子字符串,找到第一个匹配范围(例如5到15之间)的子字符串,并将该实例替换为另一个字符串“X”。我的测试字符串s="1foo100bar10gee1"我的初始模式是1个或多个数字的任何字符串,例如,re=Regexp.new(/\d+/)matches=s.scan(re)给出["1","100","10","1"]如果我想用“X”替换第N个匹配项,并且只替换第N个匹配项,我该怎么做?例如,如果我想替换第三个匹配项“10”(匹配项[2]),我不能只说s[matches[2]]="X"因为它做了两次替换“1fooX0barXg
我有一个正在构建的应用程序,我需要一个模型来创建另一个模型的实例。我希望每辆车都有4个轮胎。汽车模型classCar轮胎模型classTire但是,在make_tires内部有一个错误,如果我为Tire尝试它,则没有用于创建或新建的activerecord方法。当我检查轮胎时,它没有这些方法。我该如何补救?错误是这样的:未定义的方法'create'forActiveRecord::AttributeMethods::Serialization::Tire::Module我测试了两个环境:测试和开发,它们都因相同的错误而失败。 最佳答案
我正在处理旧代码的一部分。beforedoallow_any_instance_of(SportRateManager).toreceive(:create).and_return(true)endRubocop错误如下:Avoidstubbingusing'allow_any_instance_of'我读到了RuboCop::RSpec:AnyInstance我试着像下面那样改变它。由此beforedoallow_any_instance_of(SportRateManager).toreceive(:create).and_return(true)end对此:let(:sport_
几个月前,我读了一篇关于rubygem的博客文章,它可以通过阅读代码本身来确定编程语言。对于我的生活,我不记得博客或gem的名称。谷歌搜索“ruby编程语言猜测”及其变体也无济于事。有人碰巧知道相关gem的名称吗? 最佳答案 是这个吗:http://github.com/chrislo/sourceclassifier/tree/master 关于ruby-寻找通过阅读代码确定编程语言的rubygem?,我们在StackOverflow上找到一个类似的问题:
我收到格式为的回复#我需要将其转换为哈希值(针对活跃商家)。目前我正在遍历变量并执行此操作:response.instance_variables.eachdo|r|my_hash.merge!(r.to_s.delete("@").intern=>response.instance_eval(r.to_s.delete("@")))end这有效,它将生成{:first="charlie",:last=>"kelly"},但它似乎有点hacky和不稳定。有更好的方法吗?编辑:我刚刚意识到我可以使用instance_variable_get作为该等式的第二部分,但这仍然是主要问题。
目录一.加解密算法数字签名对称加密DES(DataEncryptionStandard)3DES(TripleDES)AES(AdvancedEncryptionStandard)RSA加密法DSA(DigitalSignatureAlgorithm)ECC(EllipticCurvesCryptography)非对称加密签名与加密过程非对称加密的应用对称加密与非对称加密的结合二.数字证书图解一.加解密算法加密简单而言就是通过一种算法将明文信息转换成密文信息,信息的的接收方能够通过密钥对密文信息进行解密获得明文信息的过程。根据加解密的密钥是否相同,算法可以分为对称加密、非对称加密、对称加密和非
?博客主页:https://xiaoy.blog.csdn.net?本文由呆呆敲代码的小Y原创,首发于CSDN??学习专栏推荐:Unity系统学习专栏?游戏制作专栏推荐:游戏制作?Unity实战100例专栏推荐:Unity实战100例教程?欢迎点赞?收藏⭐留言?如有错误敬请指正!?未来很长,值得我们全力奔赴更美好的生活✨------------------❤️分割线❤️-------------------------
嗨~大家好,这里是可莉!今天给大家带来的是7个C语言的经典基础代码~那一起往下看下去把【程序一】打印100到200之间的素数#includeintmain(){ inti; for(i=100;i 【程序二】输出乘法口诀表#includeintmain(){inti;for(i=1;i 【程序三】判断1000年---2000年之间的闰年#includeintmain(){intyear;for(year=1000;year 【程序四】给定两个整形变量的值,将两个值的内容进行交换。这里提供两种方法来进行交换,第一种为创建临时变量来进行交换,第二种是不创建临时变量而直接进行交换。1.创建临时变量来