Skip to main content

Primzahlprüfer

Prüfen, ob eine Zahl eine Primzahl ist, und alle Primzahlen bis zu einem Limit finden.

Geprüft von · Zuletzt geprüft

Den Primzahlprüfer verwenden

  1. Einen Modus wählen: Der Tab Zahl prüfen testet eine einzelne ganze Zahl auf Primalität; der Tab Primzahlen bis N finden listet jede Primzahl unterhalb einer von dir gewählten Obergrenze auf.
  2. Die Zahl eingeben. Der Prüf-Modus akzeptiert jede positive ganze Zahl bis zu 253-1; der Sieb-Modus akzeptiert bis zu zehn Millionen, damit die Benutzeroberfläche reaktionsfähig bleibt.
  3. Abschicken mit Enter oder der Schaltfläche. Im Prüf-Modus erhältst du ein Ja/Nein-Ergebnis und, wenn die Zahl zusammengesetzt ist, ihre Primfaktorisierung. Im Sieb-Modus erhältst du die vollständige Liste plus die Anzahl der gefundenen Primzahlen.
  4. Die Faktorisierung durchsehen, um zu sehen, welche kleinen Primzahlen deine Zahl teilen; das ist oft nützlicher als die Ja/Nein-Antwort.
  5. Die Liste kopieren mit der Schaltfläche "Alle kopieren"; die Ausgabe ist kommagetrennt und lässt sich sauber in eine Tabellenkalkulation oder ein Code-Snippet einfügen.

Im Inneren: Probedivision und das Sieb

Für eine einzelne Prüfung verwendet das Tool rad-basierte Probedivision: es teilt zuerst durch 2 und 3, dann durch Zahlen der Form 6k±1 bis zu √n. Das eliminiert Vielfache von 2 und 3 aus der Kandidatenliste und liefert eine ca. dreifache Beschleunigung gegenüber der normalen Probedivision. Der Algorithmus ist deterministisch und korrekt für jede Eingabe, die in eine JavaScript-Zahl passt.

Für das Sieb implementiert das Tool das Sieb des Eratosthenes in einem Uint8Array der Größe N+1 Bytes. Es markiert 0 und 1 als zusammengesetzt, und für jede gefundene Primzahl p beginnt es, Vielfache von p² zu streichen (frühere Vielfache wurden bereits von kleineren Primzahlen gestrichen). Das läuft in O(N log log N) Zeit und O(N) Raum. Für sehr großes N würde ein segmentiertes Sieb oder der probabilistische Miller-Rabin-Test besser skalieren, aber Probedivision und klassisches Eratosthenes sind genau richtig für den Bereich, den dieses Tool unterstützt.

Wann du einen Primzahltest brauchst

  • Einen Primmodulus verifizieren, wenn man ein Diffie-Hellman-Demo für einen Kryptographie-Kurs von Hand aufbaut.
  • Eine Liste von Primzahlen für ein Project-Euler-Problem oder eine Programmierwettbewerbs-Lösung generieren.
  • Die Primfaktorisierung eines Produkts finden, um einen Bruch zu kuerzen oder eine Quadratwurzel zu vereinfachen.
  • Das Sieb als erste Begegnung mit algorithmischem Denken in einem Informatik-Kurs lehren.
  • Prüfen, ob eine Hash-Tabellen-Größe prim ist, eine verbreitete Daumenregel beim Hash-Funktions-Design.
  • Die nächste Primzahl über einem Zielwert finden, nützlich für Load-Balancing-Gewichte, die koprim sein müssen.

Sonderfälle, die das Tool behandelt

  • 1 ist keine Primzahl. Die Definition erfordert genau zwei verschiedene positive Teiler; 1 hat nur sich selbst. Das Überspringen dieser Konvention bricht den Fundamentalsatz der Arithmetik, weil die eindeutige Faktorisierung versagen würde.
  • 2 ist die einzige gerade Primzahl. Jede andere gerade Zahl ist durch 2 teilbar, sodass das Sieb sie in seinem ersten Durchlauf streicht.
  • Carmichael-Zahlen wie 561 und 1105 täuschen naive Fermat-Tests, werden aber hier korrekt als zusammengesetzt identifiziert, weil die Probedivision ihre kleinen Faktoren direkt findet.
  • Große Mersenne-nahe Zahlen sind für dieses Tool kein Sonderfall; 231-1 (2.147.483.647) ist prim und die Probedivision bestätigt es in Millisekunden.
  • Eingaben über 253-1 verlieren die ganzzahlige Präzision in JavaScripts number; dafür ist ein BigInt-basierter Miller-Rabin, nicht dieses Tool, die richtige Wahl.
  • Null oder negative Eingaben werden auf UI-Ebene abgelehnt; Primalität ist nur für natürliche Zahlen größer als 1 definiert.

Primzahlen, kurz erklärt

Primzahlen sind die multiplikativen Atome der ganzen Zahlen: Jede positive ganze Zahl größer als 1 faktorisiert sich eindeutig als Produkt von Primzahlen (der Fundamentalsatz der Arithmetik, von Euklid in den Elementen bewiesen). Es gibt unendlich viele, wie Euklid mit seinem berühmten Widerspruchsargument zeigte. Ihre Verteilung ist im Detail unregelmäßig, aber im Durchschnitt glatt: Die Primzahlzählfunktion π(N) ist asymptotisch zu N/ln(N), ein Ergebnis, das 1896 unabhängig von Hadamard und de la Vallée Poussin bewiesen und Primzahlsatz genannt wurde. Wilsons Theorem liefert eine saubere, aber unpraktische Charakterisierung: p ist genau dann prim, wenn (p-1)! ≡ -1 (mod p). Für Primzahltests sind die modernen Arbeitspferde Miller-Rabin (probabilistisch, extrem schnell) und AKS (deterministisch polynomial-zeitlich, 2002 angekündigt), die beide bei den Skalen, auf die dieses Tool abzielt, nicht benötigt werden.

Wann man nach etwas Leistungsfähigerem greifen sollte

Für Primzahlen jenseits von zehn Millionen werden segmentierte Siebe, die in C (primesieve) oder Python mit numpy-Vektorisierung implementiert sind, einen Browser-Sieb um zwei Größenordnungen schlagen. Für Primzahltests für Zahlen mit Hunderten von Stellen - die Skala, die für die RSA-Schlüssel-Generierung wichtig ist - benötigst du Miller-Rabin mit einem kuratierten Satz von Zeugen, den OpenSSL und GMP einsatzbereit mitliefern. Für schnelle Faktorisierung von 20 bis 60-stelligen zusammengesetzten Zahlen sind Pollards Rho und die elliptische Kurvenmethode (ECM) in Tools wie YAFU oder Msieve das Richtige. Dieses Browser-Tool ist die richtige Wahl, wenn du ohne Installation eine schnelle Antwort für eine Zahl bis ca. 1015 benötigst, und es gewinnt bei null Installationsaufwand jedes Mal.

Häufig gestellte Fragen

Warum ist die Probedivisionsgrenze genau die Quadratwurzel?

Wenn <em>n</em> einen Teiler <em>d</em> größer als &radic;<em>n</em> hat, dann ist <em>n</em>/<em>d</em> ein Teiler kleiner als &radic;<em>n</em>. Wenn also die Probedivision bis zu &radic;<em>n</em> keinen Teiler findet, findet auch kein größerer Kandidat einen, und <em>n</em> ist prim. Das halbiert den Exponenten der Arbeit von <em>n</em> auf &radic;<em>n</em> und ist eine Standard-Beobachtung aus dem ersten Jahr der Zahlentheorie.

Wird Miller-Rabin für große Zahlen verwendet?

Nicht in diesem Build. Miller-Rabin ist das richtige Tool für Zahlen mit Hunderten von Stellen, aber im hier unterstützten Bereich (bis zu 2<sup>53</sup>-1 für Einzelprüfungen, 10<sup>7</sup> für das Sieb) sind radbasierte Probedivision und das Sieb des Eratosthenes bereits deterministisch, korrekt und schnell. Miller-Rabin hinzuzufügen würde BigInt-Arithmetik und eine kuratierte Menge von Zeugen erfordern; ein browserseitiger Primzahlprüfer für kryptographisch-große Zahlen wird besser von einem spezialisierten Tool bedient.

Verlasst das, was ich tippe, meinen Browser?

Nein. Das Preact-Tool führt die Probedivision und das Sieb vollständig in deinem Tab durch; es gibt keinen Netzwerk-Roundtrip für die Berechnung, kein Analytics-Tag, das an die Zahl angehängt ist, und keine persistente Speicherung deiner Eingabe. Sogar die Schaltfläche "Alle kopieren" schreibt in die lokale Zwischenablage-API, nicht auf einen Server.

Warum ist das Sieb auf zehn Millionen begrenzt?

Das Sieb verwendet ein Uint8Array von N+1 Bytes, sodass eine 10-Millionen-Obergrenze etwa 10 MB Arbeitsspeicher benötigt und der gesamte Durchlauf deutlich unter einer Sekunde endet. Zu 10<sup>8</sup> zu gehen würde 100 MB zuweisen und Mobilgeräte beginnen zu belasten; darüber hinaus möchte man ein segmentiertes Sieb, das ein kleines cache-großes Fenster wiederverwendet. Die Obergrenze ist eine Usability-Entscheidung, keine algorithmische Beschränkung.

Was bedeutet es, dass 1 von der Definition der Primzahl ausgeschlossen ist?

Die moderne Definition erfordert genau zwei verschiedene positive Teiler. Wenn 1 erlaubt wäre, müsste der Fundamentalsatz der Arithmetik - jede positive ganze Zahl faktorisiert sich eindeutig in Primzahlen - eine unglückliche Ausnahme haben, weil man jede Anzahl von Einsen einer Faktorisierung voranstellen könnte. Zahlentheoretiker des neunzehnten Jahrhunderts einigten sich auf den Ausschluss von 1 genauso, um den Satz sauber zu halten.

Sind Zwillingsprimzahlen (wie 11 und 13) in der Ausgabe besonders?

Das Tool hebt Zwillingsprimzahlen nicht automatisch hervor, aber sie sind in der Sieb-Ausgabe leicht zu erkennen: jedes Paar aufeinanderfolgender Listeneinträge, die sich um 2 unterscheiden. Ob es unendlich viele gibt, ist noch offen; Yitang Zhangs Grenze von 2013 zeigte, dass unendlich viele Primzahlpaare sich um höchstens 70 Millionen unterscheiden, und die Polymath-Zusammenarbeit hat das seitdem auf 246 bedingungslos und 6 unter der verallgemeinerten Elliott-Halberstam-Vermutung verschärft.

Wie funktioniert die Faktorisierung bei zusammengesetzten Zahlen?

Wenn der Prüfmodus feststellt, dass eine Zahl zusammengesetzt ist, gibt er die vollständige Primfaktorisierung durch denselben Probedivisionspass zurück, der die Nicht-Primalität bewiesen hat. Nachdem jede kleine Primzahl den laufenden Wert teilt, teilt sie ihn so oft wie möglich heraus (sodass 12 zu 2, 2, 3 wird statt 2, 6). Der endgültige Quotient, falls größer als 1, ist selbst prim und wird angehängt. Für Zahlen im unterstützten Bereich ist das schnell; für viel größere zusammengesetzte Zahlen wäre Pollards Rho oder ECM angemessen.

Was ist Wilsons Theorem und warum wird es hier nicht verwendet?

Wilsons Theorem besagt, dass <em>p</em> genau dann prim ist, wenn (<em>p</em>-1)! &equiv; -1 (mod <em>p</em>). Es ist eine schöne Charakterisierung, aber nutzlos für tatsächliche Primzahltests, weil die Berechnung von (<em>p</em>-1)! exponentiell teurer ist als die Probedivision, und die modularen Reduktionen nicht genug einsparen, um die Kosten zu rechtfertigen. Es wird häufiger in Beweisen als in Algorithmen zitiert.

Ist die Ausgabe des Siebs sortiert?

Ja, aufsteigend, weil das Sieb Primzahlen natürlich in der Reihenfolge entdeckt, in der es das Bit-Array von 2 aufwärts abtastet. Wenn du eine randomisierte Auswahl zum Benchmarken benötigst, mische die Ausgabe mit Fisher-Yates in einem separaten Schritt; das Tool randomisiert nicht für dich.

Kann ich die Primzahlliste exportieren oder teilen?

Die Schaltfläche "Alle kopieren" gibt dir eine kommagetrennte Liste in deiner Zwischenablage, bereit zum Einfügen in eine Tabellenkalkulation, eine Textdatei oder einen Code-Editor. Es gibt keine serverseitige Freigabe, weil das Tool keinen Server berührt; wenn du eine öffentliche URL benötigst, füge die Liste nach dem Kopieren in ein Gist oder ein Pastebin ein.

Verwandte Tools

Mehr Math & Calculators

ZeroUtil unterstützen