寻找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
相关产品推荐
相关产品推荐

