我在python中的代码,用于使用eratosthenes筛子查找所有质数到任意给定的限制
"""my_code"""
import time
start = time.time()
L= list(range(2,100000))
for i in L[:]:
for j in L:
k=j%i
#print(j)
if k==0 and i!=j:
L.remove(j)
print (L)
print ("sum is:",sum(L))
print("len is", len(L))
end = time.time()
print("time is",end-start)
"""my_code"""
代码是正确的,但是我有一个问题,当我想查找2到2百万之间的所有质数时,代码需要很长时间。我不得不等待一天而没有得到结果。
我的朋友给了我一个主意,那就是尝试使用mysql在数据库中执行列表。我不知道如何,所以如果有人对问题或想法有解决方案,请帮忙。
答案 0 :(得分:0)
仅做几处更改即可将执行时间缩短60%。根据经验法则,请在迭代同一列表时使用删除元素。
import time
start = time.time()
out=[]
L= range(2,100000) # Do not convert it into list
for i in L:
for j in range(2,int(i/2)+1): # Do not execute till the last element of L. Seriously no point in doing so
if i%j==0:
break # break as soon as you found out that the number is not prime.
if j==i-1:
out.append(i)
end = time.time()
print("time is",end-start)
您的代码花费了大约140秒的时间,而我的代码花费了大约50秒的时间来执行并找到第一个一百万个质数。