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

为何初始版sum_divisors函数无法正确计算数字真因子和?

为什么你的初始真因子求和代码会失效?

核心问题出在你初始代码的while循环条件上,咱们来拆解对比下:

先看你的初始代码:

def sum_divisors(n):
    sum = 0
    factor = 1
    # Return the sum of all divisors of n, not including n
    while n % factor == 0 and factor < n:
        sum = sum + factor
        factor = factor + 1
    return sum

这里的循环条件是n % factor == 0 and factor < n——这意味着只有当当前factor是n的因子时,循环才会继续执行。一旦遇到第一个不是n因子的数(比如计算n=12时的factor=5),循环就会直接终止,不会再检查后面的数了!

举个实际例子:计算n=12的真因子和(正确结果是1+2+3+4+6=16)

  1. factor=1:12%1==0 → 加入sum,sum=1,factor=2
  2. factor=2:12%2==0 → 加入sum,sum=3,factor=3
  3. factor=3:12%3==0 → 加入sum,sum=6,factor=4
  4. factor=4:12%4==0 → 加入sum,sum=10,factor=5
  5. factor=5:12%5=2≠0 → 循环条件不满足,直接退出,返回sum=10(漏掉了后面的因子6)

再看你修改后的正确代码:

def sum_factors(n):
    sum = 0
    factor = 1
    # Return the sum of all factors of n, not including n
    while n!=0 and factor < n:
        if n % factor == 0:
            sum = sum + factor
            factor = factor + 1
        else:
            factor = factor + 1
    return sum

这里的循环条件是n!=0 and factor < n——只要factor还小于n,不管它是不是因子,循环都会继续。然后在循环内部用if判断当前factor是否是因子,是就加进sum,否则直接跳过,继续检查下一个factor。这样就能遍历所有小于n的数,不会漏掉任何可能的因子。

简单来说,你初始代码把「判断是否为因子」和「循环是否继续」绑定在了一起,导致遇到非因子就提前终止循环;而正确的逻辑是先保证遍历完所有候选数,再逐个判断是否为因子。

内容的提问来源于stack exchange,提问作者Eugene

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 07:32:05