完全数(Perfect number),又称完美数或完备数,是一些特殊的自然数。它所有的真因子(即除了自身以外的约数)的和(即因子函数),恰好等于它本身。如果一个数恰好等于它的因子之和,则称该数为“完全数”。第一个完全数是6,第二个完全数是28,第三个完全数是496,后面的完全数还有8128、33550336等等
——摘自百度百科
1 for i in range(1,1001): 2 a = [] 3 for j in range(i): 4 if i % j == 0: 5 a.append(j) 6 if i == sum(a): 7 print(i)
运行报错
Traceback (most recent call last): File "t12.py", line 4, in <module> if i % j == 0: ZeroDivisionError: integer division or modulo by zero
后来发现原因
print([i for i in range(3)]) # [0, 1, 2]
range 只写一个参数时,是以 0 作为起点。而 0 不能作为被除数
修改range范围
for i in range(1,1001): a = [] for j in range(1,i): if i % j == 0: a.append(j) if i == sum(a): print(i)
运行
6 28 496
也可以
for i in range(1,1001): sum = 0 for j in range(1,i // 2 + 1): if i % j == 0: print(j) sum += j if i == sum: print(i)
j 不大于 i 的一半加1