最近看数学家故事,竟然看到费马其中一个贡献是找到了第二对亲和数。 其实蛮厉害的,在没有强大计算机能力的年代,凭计算能找出另一对。
出于对他们的尊重,我也尝试用程序写个,看能计算出多少。以下是简单的程序:
def middle(num):
'''
取'中位数'
:param num:
:return:
'''
if num % 2 == 0:
return (num-2) // 2
else:
return (num-1) // 2
def cal_divisor(num):
'''
计算约数
: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):
'''
计算亲和数
: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)
结果到后面真的很慢很慢,需要对这些数据竟然研究,观察,以下是部分这些数据,程序跑了几个小时,依旧没有结束
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
网友评论