最近看數(shù)學(xué)家故事,竟然看到費(fèi)馬其中一個(gè)貢獻(xiàn)是找到了第二對(duì)親和數(shù)。 其實(shí)蠻厲害的,在沒有強(qiáng)大計(jì)算機(jī)能力的年代,憑計(jì)算能找出另一對(duì)。
出于對(duì)他們的尊重,我也嘗試用程序?qū)憘€(gè),看能計(jì)算出多少。以下是簡(jiǎn)單的程序:
def middle(num):
'''
取'中位數(shù)'
:param num:
:return:
'''
if num % 2 == 0:
return (num-2) // 2
else:
return (num-1) // 2
def cal_divisor(num):
'''
計(jì)算約數(shù)
:param num:
:return:
'''
mid_num = middle(num)
res = []
for i in range(1, mid_num+1):
if num % i == 0 and i not in res:
res.append(i)
res.append(num//i)
return res
def cal_amicable_numbers(n):
'''
計(jì)算親和數(shù)
:param n:
:return:
'''
res = {}
for key in range(4, n+1):
res_list = cal_divisor(key)
if res_list and len(res_list) > 2:
res_list.remove(max(res_list))
amicable_number_sum = sum(res_list)
if amicable_number_sum in res and res.get(amicable_number_sum) == key:
print("amicable_numbers:%s and %d" % (amicable_number_sum, key))
else:
res.update({key: amicable_number_sum})
cal_amicable_numbers(500000000)
結(jié)果到后面真的很慢很慢,需要對(duì)這些數(shù)據(jù)竟然研究,觀察,以下是部分這些數(shù)據(jù),程序跑了幾個(gè)小時(shí),依舊沒有結(jié)束
amicable_numbers:220 and 284
amicable_numbers:1184 and 1210
amicable_numbers:2620 and 2924
amicable_numbers:5020 and 5564
amicable_numbers:6232 and 6368
amicable_numbers:10744 and 10856
amicable_numbers:12285 and 14595
amicable_numbers:17296 and 18416
amicable_numbers:66928 and 66992
amicable_numbers:67095 and 71145
amicable_numbers:63020 and 76084
amicable_numbers:69615 and 87633
amicable_numbers:79750 and 88730
amicable_numbers:122368 and 123152
amicable_numbers:100485 and 124155
amicable_numbers:122265 and 139815
amicable_numbers:141664 and 153176
amicable_numbers:142310 and 168730
amicable_numbers:171856 and 176336
amicable_numbers:176272 and 180848
amicable_numbers:196724 and 202444
amicable_numbers:185368 and 203432
amicable_numbers:280540 and 365084
amicable_numbers:308620 and 389924
amicable_numbers:356408 and 399592
amicable_numbers:319550 and 430402
amicable_numbers:437456 and 455344
amicable_numbers:469028 and 486178
amicable_numbers:503056 and 514736
amicable_numbers:522405 and 525915
amicable_numbers:643336 and 652664
amicable_numbers:600392 and 669688
amicable_numbers:609928 and 686072
amicable_numbers:624184 and 691256
amicable_numbers:635624 and 712216
amicable_numbers:667964 and 783556
amicable_numbers:726104 and 796696