专业编程基础技术教程

网站首页 > 基础教程 正文

Python实现1000以内完数查找(python编写函数main找出1000以内的所有完数)

ccvgpt 2025-03-18 20:09:36 基础教程 1 ℃

任务要求

完全数(Perfect Number)是指一个正整数,它等于除了它本身之外的所有正因数(即真因数)之和。例如:

Python实现1000以内完数查找(python编写函数main找出1000以内的所有完数)

6的真因数是1、2、3,它们的和为6,因此6是一个完全数。

28的真因数是1、2、4、7、14,它们的和为28,因此28也是一个完全数。

输出1 ~ 10000内的所有完全数。

任务分析

1.核心逻辑:对每个数字计算所有真因子并求和

2.典型完数:6、28、496(1000以内仅3个完数)

任务实现

方法一:基础双层循环法

for num in range(2, 1001):
factors = []
for i in range(1, num):
if num % i == 0:
factors.append(i)
if sum(factors) == num:
print(f"{num}: factors={factors}")

说明:

  • 外层循环遍历2-1000的候选数
  • 内层循环收集所有真因子存入列表
  • 通过sum()函数验证因子和等于原数

方法二:列表推导式法

for num in range(2, 1001):
factors = [i
for i in range(1, num) if num % i == 0]
if sum(factors) == num:
print(f"{num}: factors={factors}")

说明:

  • 使用列表推导式代替内层循环
  • 简化代码结构,提高可读性
  • 保持算法逻辑不变

方法三:优化范围法

for num in range(2, 1001):
factors = []
# 只需遍历到num//2+1
for i in range(1, num // 2 + 1):
if num % i == 0:
factors.append(i)
if sum(factors) == num:
print(f"{num}: factors={factors}")

说明:

  • 将内层循环范围缩小到num//2+1
  • 减少约50%的循环次数
  • 数学依据:因子成对出现,大因子必小于num/2

运行结果

6: factors=[1, 2, 3]

28: factors=[1, 2, 4, 7, 14]

496: factors=[1, 2, 4, 8, 16, 31, 62, 124, 248]

进程已结束,退出代码为 0

最近发表
标签列表