Ich habe durch Primzahlen-Generation in Python mit dem Sieb von Eratosthenes und die Lösungen, die Menschen als eine relativ schnelle Option wie die in ein paar von the answers to a question on optimising prime number generation in python sind nicht einfach und einfach Umsetzung, die ich hier habe, konkurriert sie in der Effizienz. Meine Implementierung wird unterEin schnelles Primzahl-Sieb in Python
gegebendef sieve_for_primes_to(n):
size = n//2
sieve = [1]*size
limit = int(n**0.5)
for i in range(1,limit):
if sieve[i]:
val = 2*i+1
tmp = ((size-1) - i)//val
sieve[i+val::val] = [0]*tmp
return sieve
print [2] + [i*2+1 for i, v in enumerate(sieve_for_primes_to(10000000)) if v and i>0]
den Ausführungszeitpunkt zurück
python -m timeit -n10 -s "import euler" "euler.sieve_for_primes_to(1000000)"
10 loops, best of 3: 19.5 msec per loop
Während das Verfahren in der Antwort auf die oben verlinkten Frage beschrieben, wie die schnellsten aus dem Python-Kochbuch zu sein, ist unter
gegebenimport itertools
def erat2():
D = { }
yield 2
for q in itertools.islice(itertools.count(3), 0, None, 2):
p = D.pop(q, None)
if p is None:
D[q*q] = q
yield q
else:
x = p + q
while x in D or not (x&1):
x += p
D[x] = p
def get_primes_erat(n):
return list(itertools.takewhile(lambda p: p<n, erat2()))
Wenn es läuft, gibt es
python -m timeit -n10 -s "import euler" "euler.get_primes_erat(1000000)"
10 loops, best of 3: 697 msec per loop
Meine Frage ist, warum Leute die oben genannten aus dem Kochbuch tout, das relativ komplex ist, als der ideale Hauptgenerator?
Wer und wo wird 'erat2'" als der ideale Prime Generator "? Bitte geben Sie Referenzen an, damit wir den Zusammenhang, der zu Ihrer Frage geführt hat, besser verstehen können. – NPE
Haben Sie Ihren Algorithmus mit dem Algorithmus ['rwh_primes2'] (http://stackoverflow.com/a/3035188) verglichen? –
'erat2' wurde nur mit dem OP-Code auf dieser Seite verglichen, und Alex Martelli sagte nur, dass * Cookbook-Lösung im Vergleich zur OP-Lösung doppelt so schnell ist *. Und Ihre Lösung ist doppelt so langsam im Vergleich zu 'rwh_primes2'. –