可能是一个简单的问题,但是我想我在做同样的事情,而我得到两个不同的答案,我试图计算所有小于200万的素数之和。
## THIS WORKS ##
import sympy
ans = 0
for n in range(0, 2000000):
if sympy.isprime(n):
ans += n
print(ans)
## THIS ONE DOESNT< BUT IT LOOKS THE SAME TO ME ##
ans = sum(sympy.isprime(num) for num in (range(0, 20000000)))
ans
答案 0 :(得分:2)
在第一个实例中,您对值求和,而在第二个实例中,您对布尔值的整数转换求和。
下面的代码应该可以实现您所期望的:
ans = sum(n for n in range(0, 2000000) if sympy.isprime(n))
答案 1 :(得分:0)
在第一个代码中,您将素数加起来为2000000。在第二个代码中,您对布尔值求和,并说一个数字是否为质数。换句话说,第一个代码给出了素数之和,第二个代码给出了质数。
答案 2 :(得分:0)
第一个示例对素数求和。
第二个示例计数。 sympy.isprime(num)
返回True
或False
(1或0),并且sum
将这些1和0相加,有效地计算该范围内的素数。
第一个示例的等效衬线为
sum(num for num in range(0, 20000000) if sympy.isprime(num))
答案 3 :(得分:0)
在第二个版本中,您要总结是否是素数(计算素数),而不是素的值。为此,请使用以下代码:
ans = sum(num for num in (range(0, 20000000) if sympy.isprime(num)))