Als Python ist es normalerweise besser, einen Generator zurückzugeben, der eine unendliche Folge von Primzahlen anstelle einer Liste zurückgibt.
Activestate hat eine Liste von älterem Sieb des Eratosthenes recipes
Hier ist einer von ihnen zu Python aktualisiert 2.7 itertools count mit einem Schritt Argumente, das nicht existierte, als das ursprüngliche Rezept geschrieben wurde:
import itertools as it
def sieve():
""" Generate an infinite sequence of prime numbers.
"""
yield 2
D = {}
for q in it.count(3, 2): # start at 3 and step by odds
p = D.pop(q, 0)
if p:
x = q + p
while x in D: x += p
D[x] = p # new composite found. Mark that
else:
yield q # q is a new prime since no composite was found
D[q*q] = 2*q
Da es sich um einen Generator handelt, ist es viel effizienter als eine ganze Liste. Da Composite lokalisiert wird, ist es auch recheneffizient.
Run this:
>>> g=sieve()
Dann ist jeder nachfolgende Aufruf gibt die nächste Primzahl:
>>> next(g)
2
>>> next(g)
3
# etc
Sie können dann eine Liste zwischen den Grenzen erhalten (dh die X-te Primzahl von der ersten bis zur X + Y prime ...) mit islice:
>>> tgt=0
>>> tgt, list(it.islice(sieve(), tgt, tgt+10))
(0, [2, 3, 5, 7, 11, 13, 17, 19, 23, 29])
>>> tgt=1000000
>>> tgt, list(it.islice(sieve(), tgt, tgt+10))
(1000000, [15485867, 15485917, 15485927, 15485933, 15485941, 15485959, 15485989, 15485993, 15486013, 15486041])
Sie könnten einen Blick auf diese Frage werfen: http://stackoverflow.com/questions/567222/simp le-prime-generator-in-python – ashwinjv
Funktioniert das, wenn die Zahl 9 ist? Was ist der Zweck der Zählervariable? PS: 'a = a + 1' kann zu 'a + = 1' vereinfacht werden – pygeek
Insbesondere das Sieb von Erastothees Implementierung in der akzeptierten Antwort (http://stackoverflow.com/a/568618/3646530). Es beinhaltet die Verwendung von Generatoren. Sie können mehr Informationen darüber erhalten, was ein Generator hier ist: http://stackoverflow.com/a/231855/3646530 – ashwinjv