(1)啥是完数?
因子和等于该数本身的数。
一个正整数如果恰好等于除它本身之外所有正除数之和,那么这个数就被称为完数。
例如,6是一个完数,因为6的正除数(不包括6本身)是1、2、3,而1 + 2 + 3 = 6。
另一个例子是28,它的正除数(不包括28本身)是1、2、4、7、14,而1 + 2 + 4 + 7 + 14 = 28。
(2)代码思想
要找出1到1000之间的所有完数,我们可以编写一个程序,该程序遍历这个范围内的每个数,并计算每个数的所有因子(不包括它自己),然后将这些因子加起来,检查它们的和是否等于这个数。
(3)代码实现
在main
函数中,我们定义了三个变量,n
用来表示我们要检查的数字,sum
用来存储n
的所有因子之和,i
用来帮助我们找到n
的因子。在开始检查之前,我们先打印一行文字,告诉用户我们即将输出1到1000之间的完数。我们用一个循环(for
循环)从1开始,一直检查到1000。对于每个数字n
,我们都会重新计算它的因子之和。在检查每个新数字之前,我们把sum
重置为0,这样它就可以用来存储下一个数字的因子之和。我们用另一个循环(内层for
循环)来检查从1到n/2
的每个数字i
,看它是否是n
的因子。如果是,我们就把它加到sum
上。内层循环结束后,我们检查sum
是否等于n
。如果是,那么根据完数的定义,我们知道n
是一个完数。如果n
是一个完数,我们就打印出来,让用户知道。外层循环继续,直到检查完1到1000的所有数字。
#include <stdio.h>
int main() {
int n, sum, i;
//n表示要检查的数字
//sum表示所有因子之和
printf("1-1000之间的完数有:\n");
//0没办法除,从1开始
for (n = 1; n <= 1000; n++) {
sum = 0;
// 寻找所有的因子并计算它们的和
for (i = 1; i <= n / 2; i++) {
if (n % i == 0) {
sum += i;
}
}
// 如果因子之和等于n,那么n是一个完数
if (sum == n) {
printf("%d\n", n);
}
}
return 0;
}
#include <stdio.h>
int main() {
int m, n, s;
printf("1-1000之间的完数有:\n");
for(m=2; m<1000; m++) {
s = 0; // 初始化s为0,用于计算因子之和
for(n=1; n<=m/2; n++) {
if(m % n == 0) { // 检查n是否是m的因子
s += n; // 如果是,将n加到s上
}
}
if(s == m) { // 如果s等于m,那么m是一个完数
printf("%d\n", m); // 打印完数m
}
}
return 0;
}