两个不同的自然数A和B,如果整数A的全部因子(包括1,不包括A本身)之和等于B;且整数B的全部因子(包括1,不包括B本身)之和等于A,则将整数A和B称为亲密数。从键盘输入正整数n,求n以内的全部亲密数。 示例: 输入格式:3000 输出格式:220 284;1184 1210;2620 2924;(注意:式子中同一组数据间用一个空格隔开,不同组数据间用分号隔开,所有符号均为英文状态下的符号)
时间: 2023-06-12 10:05:07 浏览: 110
以下是 Python 代码实现:
```python
n = int(input())
divisor_sum = [0] * (n + 1)
for i in range(1, n + 1):
for j in range(i * 2, n + 1, i):
divisor_sum[j] += i
result = []
for i in range(1, n + 1):
if divisor_sum[i] <= n and divisor_sum[divisor_sum[i]] == i and i != divisor_sum[i]:
result.append((i, divisor_sum[i]))
output = ''
for a, b in result:
output += f'{a} {b};'
print(output[:-1])
```
代码思路:
1. 用列表 `divisor_sum` 存储每个正整数的因子和,初始值全部为 0。
2. 从 1 到 n 遍历每个正整数 i,计算 i 的所有因子,并把因子的和累加到 `divisor_sum`[j] 中,其中 j = 2i, 3i, ..., ni,即 i 的倍数。
3. 从 1 到 n 遍历每个正整数 i,如果它的因子和 `divisor_sum`[i] 小于等于 n,且 `divisor_sum`[`divisor_sum`[i]] 等于 i,且 i 不等于 `divisor_sum`[i],则将 (i, `divisor_sum`[i]) 添加到结果列表中。
4. 把结果列表中的每个元素格式化为字符串,拼接到输出字符串 `output` 中,每个元素之间用分号隔开。最后输出 `output`,注意去掉最后一个分号。
阅读全文