题目
找出 1000 以内的所有完全数并输出。完全数(Perfect number)是指一个正整数恰好等于除了它本身以外的所有真因子之和(例如 6 = 1 + 2 + 3)。
输入格式:无键盘输入。
输出格式:按升序输出 1000 以内的完全数,每个数字后跟空格,最后换行。
数据范围与约定:测试范围 [2, 1000]。
思路与算法
1. 真因子求和
对于每个数 n,初始化因数和 sum = 1(1 必然是所有大于 1 的数的真因子)。因子成对出现,遍历从 2 到 i * i ≤ n,若整除则累加 i 和 n/i(注意完全平方时不要重复加)。
2. 结果判定
遍历求和结束后,若 sum == n,则该数为完全数(如 6, 28, 496)。
完整程序
#include <stdio.h>
int main(void)
{
// 完全数定义:等于除自身以外的所有真因子之和(如 6 = 1 + 2 + 3)
for (int n = 1; n <= 1000; n++) {
int sum = 0;
// 遍历所有可能的真因子(最大不超过 n/2)
for (int d = 1; d <= n / 2; d++) {
if (n % d == 0) {
sum += d;
}
}
if (sum == n) {
printf("%d\n", n);
}
}
return 0;
}运行示例
输出:
1
6
28
496