酷代码 AI
菜单

古希腊数学家毕达哥拉斯在自然数研究中发现:     220的所有真约数(即不是自身的约数)之和为:1+2+4+5+10+11+20+22+44+55+110=284。     而284的所有真约数为1、2、4、71、 142,加起来恰好为220。 人们对这样的数感到很惊奇,并称之为亲和数。一般地讲,如果两个数中任何一个数都是另一个数的真约数之和,则这两个数就是亲和数。 注意这两个数是不同的. 你的任务就编写一个程序, 输出n以内的亲和数 输入 读入一个整数 𝑛 [ 1 , 10 5 ] 输出 每行一对亲和数, 小的在前, 大的在后 多对亲和数,按照第一个数由小到大排序。 样例输入 复制 2290 样例输出 复制 220 284 1184 1210

```python def sum_of_divisors(n): """计算n的所有真约数之和""" if n <= 1: return 0 total = 1 # 1是所有大于1的数的真约数 for i in range(2, int(n0.5) + 1): if n % i == 0: total += i if i != n // i: # 避免重复添加平方根 total += n // i return total def find_amicable_numbers(n): """找出n以内的所有亲和数对""" amicable_pairs = [] for a in range(2, n + 1): b = sum_of_divisors(a) if b > a and b <= n: # 确保b在范围内且a < b if sum_of_divisors(b) == a: amicable_pairs.append((a, b)) return amicable_pairs def main(): n = int(input()) pairs = find_amicable_numbers(n) for a, b in pairs: print(f"{a} {b}") if __name__ == "__main__": main() ``` [2026-01-11 17:40:43 | AI问答 | 258点数解答]

服务商
相关提问
发财导航,免费问AI
实用工具查看更多