计算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
相关产品推荐
相关产品推荐

