Heim  >  Artikel  >  Backend-Entwicklung  >  Warum zählt dieser Python-Code nur Primzahlen, gibt sie aber nicht aus?

Warum zählt dieser Python-Code nur Primzahlen, gibt sie aber nicht aus?

Susan Sarandon
Susan SarandonOriginal
2024-11-11 11:18:03649Durchsuche

Why is this Python code only counting prime numbers but not printing them?

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn