为什么这两个代码不同?

时间:2019-09-09 08:26:45

标签: python

可能是一个简单的问题,但是我想我在做同样的事情,而我得到两个不同的答案,我试图计算所有小于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

4 个答案:

答案 0 :(得分:2)

在第一个实例中,您对值求和,而在第二个实例中,您对布尔值的整数转换求和。

下面的代码应该可以实现您所期望的:

ans = sum(n for n in range(0, 2000000) if sympy.isprime(n))

答案 1 :(得分:0)

在第一个代码中,您将素数加起来为2000000。在第二个代码中,您对布尔值求和,并说一个数字是否为质数。换句话说,第一个代码给出了素数之和,第二个代码给出了质数。

答案 2 :(得分:0)

第一个示例对素数求和。

第二个示例计数sympy.isprime(num)返回TrueFalse(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)))
相关问题