You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

寻找10000以内所有完全数的Python程序报错求助

完全数程序错误排查与修复

你的代码核心问题:

  • 内层循环范围完全错误:j的范围设到20001完全没必要,会导致程序低效且无限触发打印逻辑。另外j从1开始会重复加1(sum_div初始已经设为1),直接导致约数和计算错误。
  • 打印判断时机错误:你在内层循环的每一次迭代中都判断sum_div == i,还没加完所有约数就可能触发打印。比如i=1时,sum_div初始值就是1,第一次循环就满足条件,后续内层循环一直运行,就会无限打印1。
  • 边界值处理错误:1没有自身以外的正约数,sum_div应该初始为0而非1,否则会错误判定1是完全数。

修复后的代码

# 遍历1到10000的所有数
for i in range(1, 10001):
    sum_div = 0
    # 约数只需检查到i//2,大于i/2的数不可能是i的约数(除了i自身)
    for j in range(1, i // 2 + 1):
        if i % j == 0:
            sum_div += j
    # 所有约数累加完成后,再判断是否符合完全数条件
    if sum_div == i:
        print(i)

代码说明

  • 将sum_div初始化为0,避免i=1时的错误判定。
  • 内层循环j的范围缩小到i//2,大幅减少循环次数,提升程序运行效率。
  • 把sum_div == i的判断移到内层循环结束后,确保所有约数都累加完成再进行判定,不会提前触发打印。

运行这段代码会输出10000以内的四个完全数:6、28、496、8128。

内容的提问来源于stack exchange,提问作者romanbouchouiev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 00:54:18