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

为何这段完美数查找程序误将24判定为完美数?

问题原因分析

你的代码错误判定24为完美数,核心问题有两个:

  • 内层循环范围冗余且逻辑有误:内层循环遍历到int(a),但实际上判断i的真因子只需要遍历到i本身(不包含i),也就是range(1, i),没必要遍历到输入的a,这会做大量无意义的循环。
  • 提前触发完美数判定:你在内层循环的因子累加过程中,只要b == i就立刻输出“是完美数”,但此时还没加完i的所有真因子。比如24的真因子依次是1、2、3、4、6、8、12,当累加到1+2+3+4+6+8=24时,代码就直接判定24是完美数,但后续还有因子12没加,实际总和是36,远大于24。

修正后的示例代码

a = input('input a number :')
for i in range(1, int(a)):
    b = 0
    # 内层循环仅遍历到i的前一个数,精准查找真因子
    for z in range(1, i):
        if i % z == 0:
            b += z
    # 所有因子累加完成后再做最终判断
    if b == i:
        print(i, 'is a perfect number')

内容的提问来源于stack exchange,提问作者Nurullah Gençeli

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 05:31:24