判断一个正整数a是否为完数,如果是完数,函数返回值为1,否则为0。编写主函数,输出1000以内(除了1)所有的完数。(完数:一个数的所有因子之和等于该数本身。)
时间: 2024-10-21 20:07:57 浏览: 29
3_判断素数_yes_
判断一个正整数a是否为完数可以采用以下步骤:
1. 首先,如果a小于2,它显然不是完数,因为完数定义中包含自身作为因子。所以直接返回0。
2. 接着,从2开始遍历到sqrt(a),因为因子不会超过√a(例如,对于15,因子有1、3、5,它们的乘积最大只能达到15),这样可以减少计算量。
3. 对于每个因子i,检查a是否能被i整除。如果可以,将i和a/i(这里的i可能是a/i,取决于当前迭代顺序)都加入到因子之和中。注意避免重复计数因子。
4. 最后,如果因子之和等于a,说明a是完数,返回1;否则返回0。
以下是使用Python实现的一个示例函数:
```python
import math
def is_perfect_number(n):
if n < 2:
return 0
factors_sum = 1 # 包含1
for i in range(2, int(math.sqrt(n)) + 1):
if n % i == 0:
factors_sum += i
if i != n // i: # 如果n不是平方数,还需要加上另一个因子
factors_sum += n // i
if factors_sum == n:
return 1
else:
return 0
def find_perfect_numbers(max_num):
perfect_numbers = []
for num in range(2, max_num):
if is_perfect_number(num):
perfect_numbers.append(num)
print(perfect_numbers)
# 输出1000以内的完数(不包括1)
find_perfect_numbers(1000)
```
阅读全文