完全数(Perfect number),又称完美数或完备数,是一些特殊的自然数。它所有的真因子(即除了自身以外的约数)的和(即因子函数),恰好等于它本身。
如果一个数恰好等于它的真因子之和,则称该数为“完全数”。第一个完全数是6,第二个完全数是28,第三个完全数是496,后面的完全数还有8128、33550336等等。截至2018年,相关研究者已经找到51个完全数。
第一版:
import datetime
start = datetime.datetime.now() # 计时
perfect_number = []
for i in range(2,10001):
factor_sum = 0
for j in range(1,int(i/2)+1): # 因为因数成对出现
if i % j == 0:
factor_sum.append(j)
if factor_sum == i:
perfect_number.append(factor_sum)
print(perfect_number)
end = datetime.datetime.now() # 计时
print(f"程序运行了{end - start}秒")
结果:
[6, 28, 496, 8128]
程序运行了0:00:03.323997秒
第二版(看看里面到底有哪些真因数):
# 找出10000以内的完美数
import datetime
start = datetime.datetime.now() # 计时
perfect_number = []
for i in range(2,10001):
factor_sum = []
for j in range(1,int(i/2)+1):
if i % j == 0:
factor_sum.append(j)
if sum(factor_sum) == i:
print(f"{i}:{factor_sum}")
perfect_number.append(factor_sum)
print(perfect_number)
end = datetime.datetime.now() # 计时
print(f"程序运行了{end - start}秒")
结果:
6:[1, 2, 3]
28:[1, 2, 4, 7, 14]
496:[1, 2, 4, 8, 16, 31, 62, 124, 248]
8128:[1, 2, 4, 8, 16, 32, 64, 127, 254, 508, 1016, 2032, 4064]
[[1, 2, 3], [1, 2, 4, 7, 14], [1, 2, 4, 8, 16, 31, 62, 124, 248], [1, 2, 4, 8, 16, 32, 64, 127, 254, 508, 1016, 2032, 4064]]
程序运行了0:00:03.617384秒