题目

完全数:找出 1000 以内等于真因子之和的数

思路

本题找 1000 以内的完全数:等于其所有真因子(不含自身)之和。

对每个候选 n,令 sum=0,用 i 从 1 到 n/2 找因子,能整除 n 就把 i 加进 sum;若 sum==n 则输出。通常不把 1 当作完全数。

解题分析

真因子不含自身,求 1~n/2 的因子和。1 通常算作完全数(因子和 0 等于自身?1 的因子和 0,有的定义 1 不是完全数,按题目样例对齐)。

完整程序

#include <stdio.h>

int main(void)
{
    for (int n = 1; n <= 1000; n++) {
        int sum = 0;
        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