用python编写程序【问题描述】 求整数n以内(含n)的全部亲密数。 说明:如果正整数A的全部因子(包括1,不包括A本身)之和等于B;且正整数B的全部因子(包括1,不包括B本身)之和等于A,A不等于B,则将正整数A和B称为亲密数。 1不和其他数形成亲密数。 编写函数sumElem(),实现统计一个数字的因子之和(包括1,不包括A本身) 【输入形式】 输入整数n 【输出形式】 每一行输出一对亲密数,中间用一个空格隔开。 每一对亲密数只输出一次,小的在前。 各对亲密数按序排序,按亲密数中小的那个数从小到大排序。
时间: 2023-10-18 22:06:54 浏览: 66
以下是代码实现:
```python
def sumElem(num):
"""统计一个数字的因子之和"""
result = 1 # 先加上1
for i in range(2, int(num**0.5)+1):
if num % i == 0:
result += i
if i != num // i: # 避免重复加相同的因子
result += num // i
return result
def findAmicableNumbers(n):
"""找出n以内的全部亲密数"""
amicable_pairs = [] # 存储亲密数对的列表
for i in range(2, n+1):
sum_i = sumElem(i)
if sum_i > i and sumElem(sum_i) == i: # 判断亲密数条件
amicable_pairs.append((i, sum_i))
# 按亲密数中小的那个数从小到大排序
amicable_pairs.sort(key=lambda x: x[0])
# 输出亲密数对
for pair in amicable_pairs:
print(pair[0], pair[1])
# 测试
n = int(input("请输入整数n: "))
findAmicableNumbers(n)
```
运行结果示例:
```
请输入整数n: 10000
220 284
1184 1210
2620 2924
5020 5564
6232 6368
```
注:本程序中的 `sumElem()` 函数为计算一个数的所有因子和,具体实现方法为根据因子的对称性,只需在 $[2,\sqrt{n}]$ 的范围内枚举因子即可。
阅读全文