编写一个函数,求10,000以内所有的完数。所谓完数是指一个数正好是它的所有约数之和。例如6就是一个完数,因为6的因字有1、2、3 ,并且6=1+2+3。
时间: 2024-12-15 21:18:03 浏览: 18
要编写一个函数来找出10,000以内的所有完数,我们可以使用以下步骤:
1. 定义一个名为`is_perfect_number`的函数,它接受一个整数参数`n`。
2. 检查数字是否大于2,因为1不是合数,也不是完数。
3. 初始化两个变量,一个用于存储当前的因子之和(设为`sum_of_factors`),另一个用于存储从2开始到`sqrt(n)`的所有可能因子。
4. 遍历从2到`int(sqrt(n))`之间的整数,如果`n`能被这个整数整除,那么它就是`n`的一个因子。将这个因子和`n`除以该因子的结果都加入到因子之和中。
5. 如果因子之和等于`n`,说明找到了一个完数,返回`True`;否则,继续检查下一个因子。
6. 循环结束后,如果没有找到完数,则返回`False`。
下面是这个函数的实现代码:
```python
import math
def is_perfect_number(n):
if n < 2:
return False
sum_of_factors = 1 # 包含1,作为所有因子的起点
for i in range(2, int(math.sqrt(n)) + 1):
if n % i == 0:
sum_of_factors += i
if i != n // i: # 如果还有另一个因子,添加它
sum_of_factors += n // i
return sum_of_factors == n
# 找出10,000以内的完数
perfect_numbers = [i for i in range(1, 10001) if is_perfect_number(i)]
```
阅读全文