开发者社区> 问答> 正文

如何减少我的代码的运行时间来计算20000000以下所有素数的总和

下面代码的运行时间真的很长,是否有更有效的方法来计算低于200万的所有素数之和?

primeNumberList = []
previousNumberList = []

for i in range(2,2000000):

for x in range(2,i):
    previousNumberList.append(x)
if all(i % n > 0 for n in previousNumberList):
    primeNumberList.append(i)
previousNumberList = []

print(sum(primeNumberList))

展开
收起
一码平川MACHEL 2019-01-22 11:09:23 1579 0
1 条回答
写回答
取消 提交回答
  • def primes(n):

    """ Returns  a list of primes < n """
    sieve = [True] * n
    for i in range(3,int(n**0.5)+1,2):
        if sieve[i]:
            sieve[i*i::2*i]=[False]*((n-i*i-1)//(2*i)+1)
    return [2] + [i for i in range(3,n,2) if sieve[i]]
    

    print(sum(primes(20000000)))

    2019-07-17 23:26:12
    赞同 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
新量⼦⾰命与量⼦计算 立即下载
低代码开发师(初级)实战教程 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载