python - 为什么计算素数之和时第一个解决方案比第二个解决方案慢得多?

标签 python performance primes

我正在解决一个欧拉项目问题(在Python中),我必须计算200万以下的所有素数的总和,我想出了两个解决方案,但只有一个得到了结果,因为另一个太慢了。这是我的第一个解决方案,速度太慢:

n=2000000
list = list(range(2,n,1))

for x in list :
    if(x*x>n):
        break

    for d in range(x,n,x):
        if((x!=d) and (d in list) ):
            list.remove(d)
            continue


result=sum(list)        
print(result)

这是我的第二个解决方案,计算总和的速度非常快:

n=2000000
list = list(range(2,n,1))
temp=list
for x in list :
    if(x*x>n):
        break
    if(temp[x-2]==0):
        continue
    for d in range(x,n,x):
        if(x!=d):
            temp[d-2]=0

result=sum(list)        
print(result)

我想知道的是,为什么最后一个几乎是瞬间就计算出总和,而另一个却几分钟后都没有得出结果?

最佳答案

查找代码中的循环数。在第一个解决方案中,您有大约 4 个循环 for x in list, for d in range(x,n,x):, (d in list) list.remove(d) 也循环遍历列表以删除 d。但对于第二种解决方案,您只有两个循环 for x in list :for d in range(x,n,x):

关于python - 为什么计算素数之和时第一个解决方案比第二个解决方案慢得多?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48134612/

相关文章:

python - 如何构建计算密集型网络服务?

python - 我的模型的损失值为 0,但它只是将所有输入分类到同一类,这是怎么回事?

python - groupby pandas dataframe 并创建另一个 dataframe 水平表示 groupby 结果

c++ - Intel Xeon X5550 上的 Linux 下 __rdtscp 校准不稳定

java - Java中将素数从一个数组复制到另一个数组的方法

python - Twisted 中来自客户端的两个 TCP 连接

performance - 如何在 SOAP UI 免费版中自动运行多个负载测试?

mysql - 如何提高此查询的性能?

c++ - 使用 map 使用埃拉托色尼筛法进行内存和素数生成

阿特金筛法的 Python 实现