我有幾天在用SPOJ問題的Prime Generator算法掙扎。問題狀態是在6秒鐘內從數字m,n中打印至少100000個素數,其中n爲< = 1000000000。我有這個實現在11.701067686080933秒內打印100000素數。是否有可能在Python中擊敗時間限制(6s)。 我覺得我錯過了我的分段篩選功能,因爲我只是實現了它,我怎麼理解算法的工作,也許一個改變可以使它變得更好。Prime Generator(用於Spoj解決方案)
在這裏可以獲得一些幫助。
def sieveOfErosthen(m):
limit=m+1
prime=[True]*limit
for i in range(2,int(m**0.5)):
if prime[i]:
for x in range(i*i,limit,i):
prime[x]=False
return prime
def segmentedSieve(m,n):
limit= n+1
segment=[True]*limit
for j in range(2,int(n**0.5)):
if sieveOfErosthen(j):
for b in range(j*(m//j),limit,j):
if b >j:
segment[b]=False
for v in range(m,limit):
if segment[v]:
print(v)
return True
請格式化你的代碼,它包含幾個語法錯誤。 – Pythonist
請參閱我的分段篩[HERE](https://stackoverflow.com/a/10249801/448810)。 – user448810