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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 06:48:03