编写函数找出指定数以内的亲密数 a的真因子和等于b,b的真因子和等于a(a,b) 亲密数对
时间: 2023-09-09 10:07:51 浏览: 109
亲密数算法
4星 · 用户满意度95%
亲密数是指两个正整数中,彼此的真因子和相等,且除了自身以外,彼此本身不相等的数对。下面是一个找出指定数以内的亲密数的 Python 函数:
```python
def find_amicable_numbers(limit):
amicable_numbers = []
for a in range(1, limit+1):
b = sum(proper_divisors(a))
if b > a and sum(proper_divisors(b)) == a:
amicable_numbers.append((a, b))
return amicable_numbers
def proper_divisors(n):
divisors = []
for i in range(1, int(n/2)+1):
if n % i == 0:
divisors.append(i)
return divisors
```
这个函数首先定义了一个空列表 `amicable_numbers`,用来存储找到的亲密数对。然后从 1 到 `limit` 遍历每一个数 `a`,计算其真因子和 `b`。如果 `b` 大于 `a` 且 `b` 的真因子和等于 `a`,则将 `(a, b)` 加入到 `amicable_numbers` 列表中。最后返回 `amicable_numbers` 列表。
`proper_divisors` 函数用来计算一个数的真因子列表。它从 1 到该数的一半遍历每一个数,如果该数是该数的因子,则将其加入到真因子列表中。
使用这个函数可以找到指定数以内的所有亲密数对,例如:
```python
>>> print(find_amicable_numbers(10000))
[(220, 284), (1184, 1210), (2620, 2924), (5020, 5564), (6232, 6368)]
```
这个结果表示在 10000 以内,存在五对亲密数对,分别是 (220, 284),(1184, 1210),(2620, 2924),(5020, 5564),(6232, 6368)。
阅读全文