Python编写完全数检测函数运行异常,求问题排查及修正方案
完全数检测函数问题修复
存在的问题
- 核心笔误:判断条件错误,你写的
a%1==0中除数误写为固定值1,任意整数对1取余结果都为0,该条件永远成立,代码实际是在计算1到a-1的累加和,并非统计真因数的和 - 不规范写法:使用Python内置函数名
sum作为变量名,会覆盖内置方法,属于不推荐的编码习惯,建议更换为语义更明确的变量名如factor_sum - 边界情况缺失:未处理a≤1的输入,这类数值不可能是完全数,会无意义占用运算资源
修复后可正常运行的代码
def is_perfect(a): # 完全数均为大于1的正整数,直接排除不符合条件的输入 if a <= 1: return False factor_sum = 0 # 遍历所有小于a的正整数,统计真因数之和 for i in range(1, a): if a % i == 0: factor_sum += i return factor_sum == a
可选性能优化
如果需要检测数值较大的完全数,可以将循环范围缩小到range(1, int(a**0.5)+1),每次找到因数i时,同时把a//i也加入求和(注意排除i和a//i相等、以及a//i等于a的情况),可以大幅降低循环次数,优化后代码如下:
def is_perfect(a): if a <= 1: return False factor_sum = 1 sqrt_a = int(a**0.5) for i in range(2, sqrt_a + 1): if a % i == 0: factor_sum += i another_factor = a // i if another_factor != i: factor_sum += another_factor return factor_sum == a
内容的提问来源于stack exchange,提问作者altalio
相关产品推荐
相关产品推荐

