Einfacher Primzahlengenerator in Python
Dieser Code zielt darauf ab, eine einfache Liste von Primzahlen zu generieren, gibt aber derzeit nur die Anzahl aus , unabhängig davon, ob eine Zahl eine Primzahl ist oder nicht.
Das Problem
Der Code verwendet eine verschachtelte Schleife, um die Teilbarkeit des Zählers (Zählung) durch Zahlen von 2 bis zur Quadratwurzel der Zählung zu prüfen. Es wird jedoch fälschlicherweise davon ausgegangen, dass eine Zahl, die nicht durch die aktuelle Iteration der inneren Schleife teilbar ist, eine Primzahl sein muss.
Die Lösung
Um dieses Problem zu beheben , führen wir eine boolesche Variable ein, isprime, um den Primzahlstatus von count zu verfolgen. Wenn count innerhalb der inneren Schleife durch den aktuellen Wert von x teilbar ist, setzen wir isprime auf False und unterbrechen die Schleife. Dadurch wird sichergestellt, dass wir die Anzahl nur drucken, wenn es sich tatsächlich um eine Primzahl handelt.
Optimierte Implementierung
Während dieser Code ein grundlegendes Verständnis der Primzahlgenerierung vermittelt, gibt es einen effizienteren Ansatz namens Das Sieb des Eratosthenes kann eingesetzt werden. Diese Technik beginnt mit der Annahme, dass alle Zahlen Primzahlen sind, und durchläuft dann die Folge, wobei Nicht-Primzahlen als zusammengesetzt markiert werden.
Hier ist eine hochoptimierte Implementierung des Siebes des Eratosthenes:
def gen_primes(): D = {} q = 2 while True: if q not in D: yield q D[q * q] = [q] else: for p in D[q]: D.setdefault(p + q, []).append(p) del D[q] q += 1
Dies Code gibt einen Generator zurück, der Primzahlen liefert. Es verwendet ein speichereffizientes Kartierungssystem, um Verbundwerkstoffe und ihre Zeugen zu verfolgen. Diese Optimierung reduziert die Zeit und die Rechenressourcen, die zum Generieren großer Primzahlen erforderlich sind, erheblich.
Das obige ist der detaillierte Inhalt vonWarum zählt dieser Python-Code nur Primzahlen, gibt sie aber nicht aus?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!