找出 1000 以内的所有完数,并输出它的所有因子。用多种方式实现
时间: 2024-05-14 07:12:05 浏览: 7
方法一:使用循环嵌套找出所有完数
完数是指一个数等于它的因子之和,例如 6 = 1 + 2 + 3,因此 6 是一个完数。我们可以使用循环嵌套的方式找出 1000 以内的所有完数,并输出它的所有因子。
代码实现:
```python
for i in range(2, 1001):
factors = []
for j in range(1, i):
if i % j == 0:
factors.append(j)
if sum(factors) == i:
print(i, "的因子为:", factors)
```
输出结果:
```
6 的因子为: [1, 2, 3]
28 的因子为: [1, 2, 4, 7, 14]
496 的因子为: [1, 2, 4, 8, 16, 31, 62, 124, 248]
```
方法二:使用列表推导式找出所有完数
我们可以使用列表推导式的方式简化上述代码,将两层循环合并为一层,并使用内置函数 sum() 来计算因子之和。
代码实现:
```python
perfect_numbers = [i for i in range(2, 1001) if sum(j for j in range(1, i) if i % j == 0) == i]
for num in perfect_numbers:
factors = [i for i in range(1, num) if num % i == 0]
print(num, "的因子为:", factors)
```
输出结果:
```
6 的因子为: [1, 2, 3]
28 的因子为: [1, 2, 4, 7, 14]
496 的因子为: [1, 2, 4, 8, 16, 31, 62, 124, 248]
```
方法三:使用函数封装代码
我们可以将上述代码封装成一个函数,方便重复调用。
代码实现:
```python
def find_perfect_numbers(n):
perfect_numbers = [i for i in range(2, n+1) if sum(j for j in range(1, i) if i % j == 0) == i]
for num in perfect_numbers:
factors = [i for i in range(1, num) if num % i == 0]
print(num, "的因子为:", factors)
find_perfect_numbers(1000)
```
输出结果:
```
6 的因子为: [1, 2, 3]
28 的因子为: [1, 2, 4, 7, 14]
496 的因子为: [1, 2, 4, 8, 16, 31, 62, 124, 248]
```