Python 计算200万以下的所有素数之和-代码太长

Python 计算200万以下的所有素数之和-代码太长,python,Python,这段代码做的是对较小的n值应该做的,但是我想计算所有小于200万的素数的和,这就是代码花费无限时间的地方。我和PyScripter一起工作。有没有办法使这段代码更有效 def is_prime(a): return all(a % i for i in range(2, a)) def sum_of_primes(n): sum = 0 x = 2 while x < n: if is_prime(x): sum =

这段代码做的是对较小的n值应该做的,但是我想计算所有小于200万的素数的和,这就是代码花费无限时间的地方。我和PyScripter一起工作。有没有办法使这段代码更有效

def is_prime(a):
    return all(a % i for i in range(2, a))

def sum_of_primes(n):
    sum = 0
    x = 2
    while x < n:
        if is_prime(x):
            sum = sum + x
        x = x+1
return sum

def main():
    print(sum_of_primes(2000000))

if __name__ == '__main__':
    main()
def是_prime(a):
返回全部(范围(2,a)中的i的%i)
定义素数之和(n):
总和=0
x=2
而x
是查找某个数以下所有素数的最佳算法之一

基本上,您可以创建一个布尔值列表,其大小范围为2到您想要的任何数字。然后删除每个真值索引的所有索引。例如,在开始搜索列表后,遇到2,将所有2*n的索引更新为false,然后跳到3,然后将所有3*n索引更新为false。然后跳过4,因为已经将其更新为false。然后你得到5并将所有5*n替换为false。结束等等。最后,您将得到一个很长的列表,其中所有真值索引都是素数。您可以根据需要使用此列表

维基百科指出的一个基本算法是:

是找到某个数下所有素数的最佳算法之一

基本上,您可以创建一个布尔值列表,其大小范围为2到您想要的任何数字。然后删除每个真值索引的所有索引。例如,在开始搜索列表后,遇到2,将所有2*n的索引更新为false,然后跳到3,然后将所有3*n索引更新为false。然后跳过4,因为已经将其更新为false。然后你得到5并将所有5*n替换为false。结束等等。最后,您将得到一个很长的列表,其中所有真值索引都是素数。您可以根据需要使用此列表

维基百科指出的一个基本算法是:


首先,您只需要检查a的平方根。也可以考虑使用一个标志数组来标记你在<代码> x= x + 1 中有一个缩进问题。现在你的代码进入无穷大循环。考虑ErasoStIES<代码> >寻找原始的算法。看看这能回答你的问题吗?首先,您只需要检查a的平方根。也可以考虑使用一个标志数组来标记你在<代码> x= x + 1 中有一个缩进问题。现在你的代码进入无穷大循环。考虑ErasoStIES<代码> >寻找原始的算法。看看这能回答你的问题吗?
 Let A be an array of Boolean values, indexed by integers 2 to n, 
 initially all set to true.    

 for i = 2, 3, 4, ..., not exceeding √n: 
 if A[i] is true:
      for j = i2, i2+i, i2+2i, i2+3i, ..., not exceeding n:
        A[j] := false.     
 Output: all i such that A[i] is true.