Python中低于给定数字的素数之和

Python中低于给定数字的素数之和,python,python-3.x,primes,Python,Python 3.x,Primes,我已经编写了下面的代码块来计算低于某个数字的所有素数之和——在这种情况下,精确地说是200000,但是执行起来需要相当长的时间;20秒: def summation_of_primes_below_n(n): list = [] sum = 0 for i in range(2, n): if checks_if_prime(i) == True: list.append(i) return list for j in list: sum = sum + j re

我已经编写了下面的代码块来计算低于某个数字的所有素数之和——在这种情况下,精确地说是200000,但是执行起来需要相当长的时间;20秒:

def summation_of_primes_below_n(n):
list = []
sum = 0
for i in range(2, n):
    if checks_if_prime(i) == True:
        list.append(i)
return list
for j in list:
    sum = sum + j
return sum

def checks_if_prime(n):
    if n == 2:
        return True
    import math
    for i in range(2, math.ceil(math.sqrt(n))+1):
        if n%i == 0:
            return False
        elif i == math.ceil(math.sqrt(n)):
            return True

print(summation_of_primes_below_n(2000000))

所以我想知道是否有办法让我的代码更高效。我将非常感谢在这方面提供适当的建议。另外,我希望你给出更多的基本解决方案,因为我是一个初学者,并提供相同的逻辑。非常感谢

您可以从实现一些更好的算法开始。例如:

或者,如果您对当前的逻辑感到满意,那么可以进行一些优化:

  • 仅检查奇数:

    范围(3,n,2)内的i的

  • 只检查表格的编号

  • 对于每个迭代,您不需要执行以下检查:
    elif i==math.ceil(math.sqrt(n)):
    。如果控制超出循环,则数字为素数

  • 您可以将
    检查\u prime
    转换为
    生成器模式
    。可以节省一些冗余,并可能改进引用的局部性


修复代码缩进的想法是否重复?它不能按原样复制。埃拉托斯烯筛是这里最好的东西,因为我们知道我们要走多远。@RoryDaulton啊,是的。不知怎么错过了。