△ 亲和数:

1 又叫朋友数,相亲数。

2 是由毕达哥拉斯,在大约公元前580年左右提出的。

3 又叫:micable number。

△ 操作效果:

用python求出1000以内的完数(1000万以内求100对亲和数)(1)

一般花费时间在34~44秒之间

△ 100对亲和数:

用python求出1000以内的完数(1000万以内求100对亲和数)(2)

△ 特殊3对亲和数:

第1对:220和284

是人类最早发现的,又是最小的一对亲和数。

第2对:17296和18416

1636年,法国"业余数学家之王"费马(一个不务正业的律师)找到第二对,位列第8位。

第3对:9363584和9437056

"解析几何之父"--法国数学家笛卡尔于1638年3月31日也宣布找到了第三对,位列第100位。

△ 代码:

1 基本代码:

def micablenumber(n): since = time.time() #用mSum记录真因子的和,初始化置为1 mSum = [1]*(n 1) for i in range(2,int(n/2 1)): j = 2 * i while j <= n: mSum[j] = i j = i micable_n = [(i, mSum[i]) for i in range(220, int(n 1)) if mSum[i] > i and mSum[i] <= n and i == mSum[mSum[i]]] print(micable_n) print('总共有:%s对亲和数'%len(micable_n)) if __name__ == '__main__': n=int(input('请输入在多大范围内查询,推荐1000万:')) micablenumber(n)

2 加入时间计算耗时的代码:

import time def micablenumber(n): since = time.time() #用mSum记录真因子的和,初始化置为1 mSum = [1]*(n 1) for i in range(2,int(n/2 1)): j = 2 * i while j <= n: mSum[j] = i j = i micable_n = [(i, mSum[i]) for i in range(220, int(n 1)) if mSum[i] > i and mSum[i] <= n and i == mSum[mSum[i]]] print(micable_n) print('总共有:%s对亲和数'%len(micable_n)) time_elapsed = time.time() - since print('总共花费时间: {:.0f}m {:.0f}s'.format( time_elapsed // 60, time_elapsed % 60)) if __name__ == '__main__': n=int(input('请输入在多大范围内查询,推荐1000万:')) micablenumber(n)

用python求出1000以内的完数(1000万以内求100对亲和数)(3)

笛卡尔:世界著名的法国哲学家、数学家、物理学家(1596年3月31日-1650年2月11日)

,