为何这段完美数查找程序误将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
相关产品推荐
相关产品推荐

