C语言找出1000以内的完数
完数是指一个数等于它的所有真因子(除了它本身以外的约数)之和的数,6的真因子是1、2、3,而1+2+3=6,所以6是一个完数。
以下是使用C语言找出1000以内所有完数的代码:
#include <stdio.h>
int main() {
int num, sum, i;
printf("1000以内的完数有:\n");
for (num = 2; num <= 1000; num++) {
sum = 1; // 1是所有大于1的数的真因子
// 找出所有真因子并求和
for (i = 2; i * i <= num; i++) {
if (num % i == 0) {
sum += i;
if (i != num / i) { // 避免重复添加平方数的情况
sum += num / i;
}
}
}
// 判断是否为完数
if (sum == num) {
printf("%d\n", num);
}
}
return 0;
}
代码说明:
- 外层循环遍历2到1000之间的每个数
- 对于每个数,初始化真因子和为1(因为1是所有大于1的数的真因子)
- 内层循环找出所有真因子:
- 从2开始,检查到该数的平方根(优化)
- 如果找到因子i,则同时添加i和num/i(除非是平方数的情况)
- 如果真因子和等于该数本身,则输出这个完数
输出结果:
运行上述程序,将输出1000以内的所有完数:
1000以内的完数有:
6
28
496
这三个数就是1000以内的所有完数。
