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

计算200万以下质数和的两段Python代码为何结果不同?

两段质数求和代码结果不同的原因分析

嘿,我来帮你拆解这两段代码为啥结果不一样——问题出在两个关键细节上:

  • 核心逻辑偏差:sum的对象错误
    第一段代码的逻辑是对的:遍历每个数,当它是质数时,把这个数本身加到总和里:

    import sympy
    ans = 0
    for n in range(0, 2000000):
        if sympy.isprime(n):
            ans += n
    print(ans)
    

    而第二段代码里,你写的是sum(sympy.isprime(num) for num in range(0, 20000000))——这里sympy.isprime(num)返回的是布尔值(True或False),在Python中布尔值本质是整数:True等于1,False等于0。所以这个sum计算的是范围内质数的个数,而不是质数的总和,这和第一段的核心逻辑完全不符!

  • 范围参数错误:多写了一个0
    第一段代码的范围是range(0, 2000000)(200万以内),但第二段写成了range(0, 20000000)(2000万以内),就算逻辑正确,范围差了10倍,结果也不可能相同。

修正后的代码

如果想用sum的方式实现和第一段完全一致的逻辑,应该先筛选出质数,再对这些质数求和:

import sympy
ans = sum(num for num in range(0, 2000000) if sympy.isprime(num))
print(ans)

这样运行后,结果就会和第一段代码完全相同了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 07:35:29