Ich habe mehrere Tage mit diesem Prime Generator Algorithmus für SPOJ Problem zu kämpfen. Der Problemzustand zum Drucken von mindestens 100000 Primzahlen aus einer Zahl m, n mit n < = 1000000000 in 6 Sekunden. Ich habe diese Implementierung, die 100000 Prime in 11.701067686080933 Sekunden drucken. Ist es möglich, die Zeitbeschränkung (6s) in Python zu übertreffen? Ich fühle, dass ich etwas in meiner segmentierten Siebfunktion vermisse, weil ich es nur implementiert habe, wie ich den Algorithmus verstehe, vielleicht kann eine Änderung es besser machen.Prime Generator (für Spoj Lösung)
Einige Hilfe würde hier geschätzt.
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
Bitte formatieren Sie den Code richtig es mehrere Syntaxfehler enthält. – Pythonist
Siehe mein segmentiertes Sieb [HIER] (https://stackoverflow.com/a/10249801/448810). – user448810