我正在解决一个欧拉项目问题(在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/