C语言编程:一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如 6 的因子为1、2、3,而6=1+2+3,因此 6 是“完数”。编写一个程序找出指定范围以内的所有“完数”。(设定“完数”不包括 1)
时间: 2023-11-11 20:11:48 浏览: 46
```c
#include <stdio.h>
int main() {
int n;
printf("请输入一个正整数n:");
scanf("%d", &n);
printf("1到%d范围内的完数有:", n);
for (int i = 2; i <= n; i++) {
int sum = 1; // 因为1是所有数的因子,所以先把1加上
for (int j = 2; j * j <= i; j++) {
if (i % j == 0) {
sum += j;
if (j * j != i) {
sum += i / j;
}
}
}
if (sum == i) {
printf("%d ", i);
}
}
printf("\n");
return 0;
}
```
思路解析:
首先输入一个正整数n,然后遍历从2到n之间的每一个数,对于每个数,我们需要找到所有它的因子并加起来,判断这个和是否等于这个数本身,如果是,那么这个数就是完数。
关键在于如何找到一个数的所有因子。我们可以从2开始遍历到这个数的平方根,如果i能够整除这个数,那么i就是这个数的一个因子,同时这个数/i也是这个数的一个因子。如果i和这个数/i不相等,那么i和这个数/i就是两个不同的因子,需要都加上。最后判断所有因子的和是否等于这个数本身即可。
注意:完数不包括1,所以遍历的时候要从2开始。