亲密数_3 2500年前数学大师毕达哥拉斯就发现,220与284两数之间存在着奇妙的联系: 220的真因数之和为:1+2+4+5+10+11+20+22+44+55+110=284 284的真因数之和为:1+2+4+71+142=220 毕达哥拉斯把这样的数对称为相亲数。相亲数,也称为亲密数,如果整数A的全部因子(包括1,不包括A本身)之和等于B,且整数B的全部因子(包括1,不包括B本身)之和等于A,则将整数A和B称为亲密数。 编程计算并输出3000以内的全部亲密数。(一对亲密数只输出一次, 小的在前。) 程序运行示例 (220,284) (1***,1***) (2***,2***) **输出格式要求:"There are following friendly-numbers pair smaller than 3000:\n" " %4d..%4d"
时间: 2023-12-29 22:03:46 浏览: 160
以下是实现亲密数计算的 Python 代码:
```python
def get_divisor_sum(num):
"""
计算 num 的真因数之和
"""
divisor_sum = 1 # 1 一定是 num 的因子
for i in range(2, int(num ** 0.5) + 1):
if num % i == 0:
divisor_sum += i
if num // i != i:
divisor_sum += num // i
return divisor_sum
# 计算 3000 以内的亲密数
friendly_pairs = []
for i in range(2, 3000):
j = get_divisor_sum(i)
if j > i and get_divisor_sum(j) == i:
friendly_pairs.append((i, j))
# 输出结果
print("There are following friendly-numbers pair smaller than 3000:")
for pair in friendly_pairs:
print(" %4d..%4d" % pair)
```
输出结果为:
```
There are following friendly-numbers pair smaller than 3000:
220.. 284
1184..1210
2620..2924
```
阅读全文