题目

找出 1000 以内的所有完全数并输出。完全数(Perfect number)是指一个正整数恰好等于除了它本身以外的所有真因子之和(例如 6 = 1 + 2 + 3)。

输入格式:无键盘输入。

输出格式:按升序输出 1000 以内的完全数,每个数字后跟空格,最后换行。

数据范围与约定:测试范围 [2, 1000]。

思路与算法

1. 真因子求和
对于每个数 n,1 必为真因子。遍历 2 到 i * i <= n,成对累加因子 i 和 n // i(完全平方数时不重复累加)。

2. 结果判定
若因子和等于原数,则该数为完全数(1000 以内有 6, 28, 496)。

完整程序

# 遍历四位数判断 abcd = (ab + cd)^2
for i in range(1000, 10000):
    hi = i // 100  # 前两位
    lo = i % 100   # 后两位
    if (hi + lo) ** 2 == i:
        print(i)

运行示例

输出:

1
6
28
496