Primalitätstest
A Primalitätstest ist ein Algorithmus Um festzustellen, ob eine Eingangszahl ist Prime. Unter anderen Bereichen von Mathematik, es wird genutzt für Kryptographie. nicht wie GanzzahlfaktorisierungPrimalitätstests geben im Allgemeinen nicht Hauptfaktoren, nur angeben, ob die Eingangsnummer Prime ist oder nicht. Es wird angenommen Laufzeit ist Polynom in der Größe der Eingabe). Einige Primalitätstests beweisen dass eine Zahl Prime ist, während andere mögen Miller -Rabin beweisen, dass eine Zahl ist zusammengesetzt. Daher könnte letzteres genauer genannt werden Compositessess -Tests anstelle von Primalitätstests.
Einfache Methoden
Der einfachste Primalitätstest ist Versuchsabteilung: bei einer Eingangsnummer, nÜberprüfen Sie, ob es gleichmäßig ist teilbar von jedem Primzahl Zwischen 2 und √n (d. H. Dass die Teilung nein lässt Rest). Wenn ja, dann n ist zusammengesetzt. Ansonsten ist es Prime.[1]
Betrachten Sie beispielsweise die Nummer 100, die durch diese Zahlen gleichmäßig teilbar ist:
- 2, 4, 5, 10, 20, 25, 50
Beachten Sie, dass der größte Faktor, 50, die Hälfte von 100 ist. Dies gilt für alle n: Alle Divisors sind weniger oder gleich zu n/2.
Tatsächlich testen wir alle möglichen Divisors bis zu n/2, wir werden einige Faktoren entdecken zweimal. Um dies zu beobachten, schreiben Sie die Liste der Divisors als Produktliste um, jeweils 100:
- 2 × 50, 4 × 25, 5 × 20, 10 × 10, 20 × 5, 25 × 4, 50 × 2
Beachten Sie, dass Produkte über 10 × 10 lediglich Zahlen wiederholen, die in früheren Produkten erschienen. Zum Beispiel bestehen 5 × 20 und 20 × 5 aus den gleichen Zahlen. Dies gilt für alle n: Alle einzigartigen Teilungen von n sind Zahlen kleiner als oder gleich √nAlso müssen wir das nicht darüber hinaus suchen.[1] (In diesem Beispiel, √n = √100 = 10.)
Alle sogar Zahlen größer als 2 können ebenfalls beseitigt werden: Wenn eine gleichmäßige Zahl teilen kann n, auch 2.
Lassen Sie uns die Trial -Division verwenden, um die Primalität von 17 zu testen. Wir benötigen nur Testen für Divisors bis zu √n, d.h. Ganzzahlen weniger als oder gleich , nämlich 2, 3 und 4. Wir können 4 überspringen, weil es sich um eine gleichmäßige Zahl handelt: Wenn 4 gleichmäßig 17 dividieren könnten, würde es auch in der Liste stehen. Das verlässt 2 und 3. Wir teilen 17 mit jeder dieser Zahlen, und wir stellen fest, dass sich nicht 17 gleichmäßig teilt - sowohl Divisionen lassen einen Rest. Also ist 17 Prime.
Wir können diese Methode weiter verbessern. Beachten Sie, dass alle Primzahlen größer als 3 von der Form sind 6k ± 1, wo k ist jede ganze Zahl von größer als 0. Dies liegt daran, dass alle Ganzzahlen ausgedrückt werden können als (6k + i), wo i = –1, 0, 1, 2, 3 oder 4. Beachten Sie, dass 2 sich dividiert (6k + 0), (6k + 2) und (6k + 4) und 3 teilen (6k + 3). Eine effizientere Methode besteht also darin, zu testen, ob n ist durch 2 oder 3 teilbar und dann alle Zahlen des Formulars durchzuschauen . Dies ist 3 -mal schneller als alle Zahlen bis hin zu Testen √n.
Verallgemeinern weiter, alle Primzahlen größer als c# (C Primorial) sind von der Form c# · k + i, zum i < c#, wo c und k sind Ganzzahlen und i repräsentiert die Zahlen, die sind Coprime zu c#. Zum Beispiel lassen c = 6. Dann c# = 2 · 3 · 5 = 30. Alle Ganzzahlen sind von der Form 30k + i Denn ich in i = 0, 1, 2, ..., 29 und k eine Ganzzahl. 2 teilt jedoch 0, 2, 4, ..., 28; 3 teilt 0, 3, 6, ..., 27; und 5 teilt 0, 5, 10, ..., 25. Also sind alle Primzahlen größer als 30 von der Form 30k + i zum i = 1, 7, 11, 13, 17, 19, 23, 29 (d. h. für i < 30 so dass GCD(i, 30) = 1). Beachten Sie, dass wenn i und 30 waren dann nicht Coprime 30k + i wäre durch einen erstklassigen Divisor von 30, nämlich 2, 3 oder 5, und wäre daher nicht die Primes. Um der vorherigen Methode zu entsprechen, negativ i zuzulassen, anstatt jeweils von 1 bis 1 zu überprüfen c#-1 (weil 0 und c# sind immer gleich), überprüfe jeweils von 1 bis 1 c#/2, was die Werteliste sein wird i so dass alle Ganzzahlen von der Form sind c#k ± i. In diesem Beispiel, 30k ± i zum i = 1, 7, 11, 13. Beachten Sie, dass diese Liste immer 1 und den Satz von Primzahlen umfasst c aber kleiner als c#/2. Nicht alle Zahlen, die den oben genannten Bedingungen erfüllen, sind Primzahl. Zum Beispiel ist 437 von der Form von c#k + i zum c = 7, c#= 210, k= 2, i= 17. 437 ist jedoch eine zusammengesetzte Zahl von 19*23. Deshalb muss die Anzahl der angegebenen Form noch auf Primalität getestet werden.
Wie c → ∞, die Anzahl der Werte, die c#k + i Kann einen bestimmten Bereich übernehmen, nimmt ab und so die Zeit zum Testen n sinkt. Für diese Methode ist es auch notwendig, auf die Spaltbarkeit durch alle Primzahlen zu suchen c. Beobachtungen, die analog zu den vorhergehenden sind, können angewendet werden rekursiv, geben die Sieb von Eratosthenes.
Eine gute Möglichkeit, diese Methoden (und aller anderen unten genannten) zu beschleunigen, besteht darin, eine Liste aller Primzahlen bis zu einer bestimmten Grenze vorzubereiten und zu speichern, z. das Sieb von Eratosthenes oder durch einen Algorithmus, der jede inkrementelle testet m Gegen alle bekannten Primzahlen < √m). Dann vor dem Testen n Für Primalität mit einer ernsthaften Methode, n kann zunächst auf die Spaltbarkeit von beliebigen Primes aus der Liste überprüft werden. Wenn es durch eine dieser Zahlen teilbar ist, ist es zusammengesetzt und weitere Tests können übersprungen werden.
Ein einfacher, aber sehr ineffizienter Primalitätstest verwendet Wilsons Theorem, die besagt, dass p ist erst und nur wenn: nur wenn:
Obwohl diese Methode ungefähr erfordert p Modulare Multiplikationen, die sie unpraktisch machen, sind Theoreme über Primzahlen und modulare Reste die Grundlage vieler mehr praktischer Methoden.
Beispielcode
Python
Das Folgende ist ein einfacher Primalitätstest in Python mit dem einfachen 6k ± 1 Optimierung zuvor erwähnt. Die nachstehend beschriebenen komplexeren Methoden sind für große viel schneller n.
def is_prime(n: int) -> bool: "" "Primalitätstest mit 6K+-1-Optimierung." "" wenn n <= 3: Rückkehr n > 1 wenn nicht n%2 oder nicht n%3: Rückkehr FALSCH i = 5 Pause = int(n**0,5) während i <= Pause: wenn nicht n%i oder nicht n%(i + 2): Rückkehr FALSCH i += 6 Rückkehr WAHR
C, C ++, C# & d
Das Folgende ist ein Primalitätstest in der C Sprachenfamilie, die dieselbe Optimierung wie oben verwendet.
bool Isprime(int n) { wenn (n == 2 || n == 3) Rückkehr Stimmt; wenn (n <= 1 || n % 2 == 0 || n % 3 == 0) Rückkehr FALSCH; zum (int i = 5; i * i <= n; i += 6) { wenn (n % i == 0 || n % (i + 2) == 0) Rückkehr FALSCH; } Rückkehr Stimmt; }
V
Das Folgende ist ein Primalitätstest in V unter Verwendung derselben Optimierung wie oben.
fn is_prime(n int) bool { wenn n == 2 || n == 3 { Rückkehr Stimmt } wenn n <= 1 || n % 2 == 0 || n % 3 == 0 { Rückkehr FALSCH } zum i : = 5; i * i <= n; i += 6 { wenn n % i == 0 || n % i + 2 == 0 { Rückkehr FALSCH } } Rückkehr Stimmt }
JavaScript
Das Folgende ist ein Primalitätstest in JavaScript Verwenden der gleichen Optimierung wie oben.
Funktion isprime(num) { wenn (num == 2 || num == 3) Rückkehr Stimmt; wenn (num <= 1 || num % 2 == 0 || num % 3 == 0) Rückkehr FALSCH; zum (Lassen i = 5; i * i <= num ; i+=6) wenn (num % i == 0 || num % (i + 2) == 0) Rückkehr FALSCH; Rückkehr Stimmt; }
R
Das Folgende ist ein Primalitätstest in R (Programmiersprache) Verwenden der gleichen Optimierung wie oben.
is.prime <- Funktion(Nummer) { wenn (Nummer <= 1) { Rückkehr (FALSCH) } anders wenn (Nummer <= 3) { Rückkehr (STIMMT) } wenn (Nummer %% 2 == 0 || Nummer %% 3 == 0) { Rückkehr (FALSCH) } i <- 5 während (i*i <= Nummer) { wenn (Nummer %% i == 0 || Nummer %% (i+2) == 0) { Rückkehr (FALSCH) } i = i + 6 } Rückkehr (STIMMT) }
Pfeil
Das Folgende ist ein Primalitätstest in DART (Programming_Language) Verwenden der gleichen Optimierung wie oben.
Checkifprimenumber(Nummer) { wenn (Nummer == 2 || Nummer == 3) { Rückkehr 'Stimmt'; } anders wenn (Nummer <= 1 || Nummer % 2 == 0 || Nummer % 3 == 0) { Rückkehr 'FALSCH'; } zum (int i = 5; i * i <= Nummer; i += 6) { wenn (Nummer % i == 0 || Nummer % (i + 2) == 0) { Rückkehr 'FALSCH'; } } Rückkehr 'Stimmt'; }
Freepascal
Das Folgende ist ein Primalitätstest in Freepascal Verwenden der gleichen Optimierung wie oben.
Funktion Isprime(N:Ganze Zahl):Boolesche; var I:Ganze Zahl; Start wenn((N = 2) oder (N = 3)) dann Ausgang(WAHR); wenn((N <= 1) oder (N Mod 2 = 0) oder (N Mod 3 = 0)) dann Ausgang(FALSCH); I : = 5; während(I * I <= N) tun Start wenn((N Mod I = 0) oder (N Mod (I+2) = 0)) dann Ausgang(FALSCH); Inc.(I, 6); Ende; Ausgang(WAHR); Ende;
Heuristische Tests
Dies sind Tests, die in der Praxis gut funktionieren, aber nicht bewiesen sind und daher technisch gesehen nicht Algorithmen sind. Der Fermat -Test und der Fibonacci -Test sind einfache Beispiele, und das sind sie sehr effektiv beim Kombinieren. John Selfridge hat das vermutet, wenn p ist eine ungerade Zahl und p ≡ ± 2 (mod 5) dann p wird die Prime sein, wenn beide folgende Auswirkungen haben:
- 2p–1 ≡ 1 (mod p),
- fp+1 ≡ 0 (mod p),
wo fk ist der k-Th Fibonacci -Nummer. Die erste Bedingung ist der Fermat -Primalitätstest unter Verwendung von Base 2.
Im Allgemeinen, wenn p ≡ a (mod x2+4), wo a ist eine quadratische Nicht-Residue (MOD x2+4) dann p Sollte Primes sein, wenn die folgenden Bedingungen bestehen:
- 2p–1 ≡ 1 (mod p),
- f(1)p+1 ≡ 0 (mod p),
f(x)k ist der k-Th Fibonacci -Polynom bei x.
Selfridge, Carl Pomerance, und Samuel Wagstaff Gemeinsam bieten 620 US -Dollar für ein Gegenbeispiel. Das Problem ist ab dem 11. September 2015 noch geöffnet.[2]
Probabilistische Tests
Probabilistische Tests sind strenger als Heuristiken, da sie nachweisbare Grenzen für die Wahrscheinlichkeit bieten, von einer zusammengesetzten Zahl täuschen zu werden. Viele populäre Primalitätstests sind probabilistische Tests. Diese Tests verwenden abgesehen von der getesteten Nummer n, einige andere Zahlen a die zufällig von einigen ausgewählt werden Probenraum; Die üblichen randomisierten Primalitätstests melden nie eine Primzahl als zusammengesetzter, aber es ist möglich, dass eine zusammengesetzte Zahl als Primzahl gemeldet wird. Die Fehlerwahrscheinlichkeit kann reduziert werden, indem der Test mit mehreren unabhängig ausgewählten Werten von wiederholt wird a; für zwei häufig verwendete Tests für irgendein zusammengesetzt n mindestens die Hälfte der a's Erkennen n's Kompositheit, also k Wiederholungen reduzieren die Fehlerwahrscheinlichkeit auf höchstens 2−k, was willkürlich durch Erhöhen gering gemacht werden kann k.
Die Grundstruktur randomisierter Primalitätstests lautet wie folgt:
- Wählen Sie zufällig eine Zahl aus a.
- Überprüfen Sie die Gleichheit (entsprechend dem gewählten Test) mit a und die angegebene Zahl n. Wenn die Gleichheit nicht zutrifft, dann n ist eine zusammengesetzte Nummer und a ist ein Zeuge Für die Kompositess und der Test stoppt.
- Kommen Sie zum Schritt zurück, bis die erforderliche Genauigkeit erreicht ist.
Nach einer oder mehreren Iterationen, wenn n wird nicht als zusammengesetzte Zahl festgestellt, dann kann sie deklariert werden Wahrscheinlich Prime.
Fermat -Primalitätstest
Der einfachste probabilistische Primalitätstest ist der Fermat -Primalitätstest (Tatsächlich ein Kompositess -Test). Es funktioniert wie folgt:
- Eine Ganzzahl gegeben nWählen Sie eine Ganzzahl a Coprime zu n und berechnen an - 1 Modulo n. Wenn sich das Ergebnis von 1 unterscheidet, dann n ist zusammengesetzt. Wenn es 1 ist, dann n kann Prim sein.
Wenn an–1 (Modulo n) ist 1 aber n ist dann nicht primär n wird als a genanntpseudoprime zur Basis a. In der Praxis beobachten wir das, wennan–1 (Modulo n) ist 1, dann n ist normalerweise primär. Aber hier ist ein Gegenbeispiel: wenn n = 341 und a = 2, dann
Obwohl 341 = 11 · 31 zusammengesetzt ist. Tatsächlich ist 341 die kleinste Pseudoprimebasis 2 (siehe Abbildung 1 von[3]).
Es gibt nur 21853 Pseudoprimes Base 2, die weniger als 2,5 sind×1010 (Siehe Seite 1005 von [3]). Das bedeutet, dass für n bis zu 2,5×1010, wenn 2n–1 (Modulo n) gleich 1, dann n ist Prime, es sei denn n ist einer dieser 21853 Pseudoprimes.
Einige zusammengesetzte Zahlen (Carmichael -Zahlen) haben die Eigenschaft, dass an - 1 ist 1 (Modulo n) für jeden a das ist coprime zu n. Das kleinste Beispiel ist n = 561 = 3 · 11 · 17, für die a560 ist 1 (Modulo 561) für alle a COPRIME bis 561. Dennoch wird der Fermat -Test häufig verwendet, wenn ein schnelles Screening der Zahlen erforderlich ist, z. B. in der Schlüsselerzeugungsphase der Schlüsselgenerierung RSA Public Key Cryptographic Algorithmus.
MILLER -RABIN- und SOLOVAY -STRASSEN -Primalitätstest
Das Miller -Rabin -Primalitätstest und Solovay -Strassen -Primalitätstest sind ausgefeiltere Varianten, die alle Verbundwerkstoffe erkennen (wiederum bedeutet dies: denn jeder zusammengesetzte Zahl nmindestens 3/4 (Miller -Rabin) oder 1/2 (Solovay -STRASSEN) von Zahlen a sind Zeugen der Kompositheit von n). Dies sind auch Compositessess -Tests.
Der Müller -Rabin -Primalitätstest funktioniert wie folgt: Bei einer Ganzzahl gegeben nWählen Sie eine positive Ganzzahl a<n. Sei 2sd = n- 1, wo d ist ungerade. Wenn
und
- für alle
dann n ist zusammengesetzt und a ist ein Zeuge für die Kompositheit. Andernfalls, n kann sein oder auch nicht. Der Miller -Rabin -Test ist a Starke Pseudoprime Test (siehe PSW[3] Seite 1004).
Der Solovay -STRASS -Primalitätstest verwendet eine andere Gleichheit: Bei einer ungeraden Zahl nWählen Sie eine Ganzzahl a<n, wenn
- , wo ist der Jacobi -Symbol,
dann n ist zusammengesetzt und a ist ein Zeuge für die Kompositheit. Andernfalls, n kann sein oder auch nicht. Der Solovay -STRASS -Test ist ein Euler Pseudoprime Test (siehe PSW[3] Seite 1003).
Für jeden einzelnen Wert von aDer Solovay -STRASS -Test ist schwächer als der Miller -Rabin -Test. Zum Beispiel wenn n = 1905 und a = 2, dann zeigt der Miller-Rabin-Test das n ist zusammengesetzt, aber der Solovay -STRASS -Test nicht. Dies liegt daran[3]).
FROBENIUS -Primalitätstest
Die Müller -Rabin- und Solovay -STRASS -Primalitätstests sind einfach und viel schneller als andere allgemeine Primalitätstests. Eine Methode zur weiteren Verbesserung der Effizienz in einigen Fällen ist die FROBENIUS PSEUDOPRIMITIONSTEST; Eine Runde dieses Tests dauert ungefähr dreimal so lange wie eine Runde von Miller -Rabin, erreicht jedoch eine Wahrscheinlichkeit, die vergleichbar mit sieben Runden von Miller -Rabin ist.
Der Frobenius -Test ist eine Verallgemeinerung der Lucas Pseudoprime Prüfung.
Baillie -PSW -Primalitätstest
Das Baillie -PSW -Primalitätstest ist ein probabilistischer Primalitätstest, der einen Fermat- oder Miller -Rabin -Test mit a kombiniert Lucas wahrscheinlicher Prime Test, um einen Primalitätstest zu erhalten, bei dem keine Gegenbeispiele bekannt sind. Das heißt, es sind kein Komposit bekannt n für das dieser Test berichtet n ist wahrscheinlich Prime.[4][5] Es wurde gezeigt, dass es keine Gegenbeispiele dafür gibt n .
Andere Tests
Leonard Adleman und Ming-deh Huang präsentierte eine fehlerlose (aber erwartete Polynomzeit) Variante der Elliptikkurve -Primalitätstest. Im Gegensatz zu den anderen probabilistischen Tests erzeugt dieser Algorithmus a primality certificateund kann so verwendet werden, um zu beweisen, dass eine Zahl Prime ist.[6] Der Algorithmus ist in der Praxis unerschwinglich langsam.
Wenn Quantencomputer Wären verfügbar, Primalität konnte getestet werden asymptotisch schneller als durch Verwendung klassischer Computer. Eine Kombination aus Shors Algorithmus, eine Ganzzahlfaktorisierungsmethode mit der Pocklington -Primalitätstest könnte das Problem in lösen .[7]
Schnelle deterministische Tests
Gegen Ende des 20. Jahrhunderts wurde gezeigt, dass eine Folge von einer Folge von Fermats kleiner Theorem könnte verwendet werden, um die Primalität zu testen.[8] Dies führte zu der Pocklington -Primalitätstest.[9] Da dieser Test jedoch ein Teil erfordert Faktorisierung von n- 1 Die Laufzeit war im schlimmsten Fall noch ziemlich langsam. Der Erste deterministisch Der Primalitätstest signifikant schneller als die naiven Methoden war die Cyclotomie -Test; Die Laufzeit kann nachgewiesen werden O((Protokolln)cProtokollprotokollprotokolln), wo n ist die Zahl, die für Primalität getestet werden kann und c ist eine Konstante unabhängig von n. Es wurden viele weitere Verbesserungen vorgenommen, aber es konnte nachweislich eine Polynomlaufzeit haben. (Beachten Sie, dass die Laufzeit in Bezug auf die Größe des Eingangs gemessen wird, was in diesem Fall ~ log istn, ist die Anzahl der Bits, die erforderlich sind, um die Zahl darzustellen n.) Das Elliptikkurve -Primalitätstest kann nachgewiesen werden, dass er in O betrieben wird ((Protokolln)6), wenn einige Vermutungen auf analytische Zahlentheorie sind wahr.[die?] Ebenso unter dem Generalisierte Riemann -Hypothese, die deterministische Millers Test, was die Grundlage des probabilistischen Miller -Rabin -Tests bildet, kann nachgewiesen werden Õ((Protokolln)4).[10] In der Praxis ist dieser Algorithmus langsamer als die beiden anderen für Größen von Zahlen, die überhaupt behandelt werden können. Da die Implementierung dieser beiden Methoden ziemlich schwierig ist und ein Risiko von Programmierfehlern erzeugt, werden häufig langsamere, aber einfachere Tests bevorzugt.
Im Jahr 2002 wurde der erste nachweislich bedingungslose deterministische Polynomzeittest für die Primalität erfunden von Manindra Agrawal, Neeraj Kayal, und Nitin Saxena. Das ASS -Primalitätstest läuft in õ ((Protokolln)12) (verbessert zu õ ((Protokolln)7.5)[11] in der veröffentlichten Überarbeitung ihres Papiers), die weiter auf õ reduziert werden kann ((logn)6) Wenn die Sophie Germain -Vermutung ist wahr.[12] Anschließend präsentierten Lenstra und Pomerance eine Version des Tests, die in der Zeit ausgeführt wird õ (logn)6) bedingungslos.[13]
Agrawal, Kayal und Saxena schlagen eine Variante ihres Algorithmus vor, die in õ (logn)3) wenn Agrawals Vermutung ist wahr; Ein heuristisches Argument von Hendrik Lenstra und Carl Pomerance deutet jedoch darauf hin, dass es wahrscheinlich falsch ist.[11] Eine modifizierte Version der Vermutung des Agrawals, der Agrawal -Popovych -Vermutung,[14] kann immer noch wahr sein.
Komplexität
Im ComputerkomplexitätstheorieDie formale Sprache, die den Primzahlen entspricht, wird als Primzahlen bezeichnet. Es ist leicht zu zeigen, dass Primes in der Co-NP: seine Komplementverbundwerkstoffe sind in Np Weil man die Kompositheit durch nicht deterministisch entscheiden kann, einen Faktor zu erraten.
1975,, Vaughan Pratt zeigten, dass es ein Zertifikat für Primalität gab, das in der Polynomzeit überprüft wurde, und so war die Primzahlen in Npund daher in Np ∩ conp. Sehen primality certificate für Details.
Die anschließende Entdeckung der Algorithmen Solovay -Strassen und Miller -Rabin setzen Primzahlen ein Leiche. 1992 der Adleman -Huang -Algorithmus[6] reduzierte die Komplexität auf Zpp = RP∩Leiche, was Pratts Ergebnis ersetzte.
Das Adleman -Pomerance -Rum -Primalitätstest Ab 1983 haben Primes eingegeben QP (Quasi-Polynomzeit), was nicht mit den oben genannten Klassen vergleichbar ist.
Aufgrund seiner Traktabilität in der Praxis, Polynom-Zeit-Algorithmen unter der Annahme der Riemann-Hypothese und anderen ähnlichen Beweisen wurde lange vermutet, aber nicht bewiesen, dass die Primalität in der Polynomzeit gelöst werden konnte. Die Existenz der ASS -Primalitätstest Schließlich haben diese langjährige Frage beigelegt und Primes in platziert P. Es ist jedoch nicht bekannt P-Completeund es ist nicht bekannt, ob es in Klassen liegt, die drinnen liegen P wie zum Beispiel NC oder L. Es ist bekannt, dass Primzahlen nicht in sind AC0.[15]
Zahlentheoretische Methoden
Es gibt bestimmte zahlentheoretische Methoden, um zu testen, ob eine Zahl Prime ist, wie die Lucas -Test und Prothes Test. Diese Tests erfordern typischerweise die Faktorisierung von n+1, n -1 oder eine ähnliche Menge, was bedeutet, dass sie für allgemeine Primalitätstests nicht nützlich sind, aber sie sind oft ziemlich leistungsfähig, wenn die getestete Zahl n Es ist bekannt, eine besondere Form zu haben.
Der Lucas -Test beruht auf der Tatsache, dass die multiplikative Reihenfolge einer Zahl a Modulo n ist n - 1 für eine Prime n Wenn a ist ein Primitive Wurzelmodulo n. Wenn wir zeigen können a ist primitiv für n, wir können zeigen n ist Prime.
Verweise
- ^ a b Riesel (1994) S. 2-3
- ^ John Selfridge#Selfridges Vermutung über Primalitätstests.
- ^ a b c d e Carl Pomerance; John L. Selfridge; Samuel S. Wagstaff, Jr. (Juli 1980). "Die Pseudoprimes bis 25 · 109" (PDF). Mathematik der Berechnung. 35 (151): 1003–1026. doi:10.1090/s0025-5718-1980-0572872-7.
- ^ Robert Baillie; Samuel S. Wagstaff, Jr. (Oktober 1980). "Lucas Pseudoprimes" (PDF). Mathematik der Berechnung. 35 (152): 1391–1417. doi:10.1090/s0025-5718-1980-0583518-6. HERR 0583518.
- ^ Robert Baillie; Andrew Fiori; Samuel S. Wagstaff, Jr. (Juli 2021). "Stärkung des Baillie-PSW-Primalitätstests". Mathematik der Berechnung. 90 (330): 1931–1955. Arxiv:2006.14425. doi:10.1090/mcom/3616. S2CID 220055722.
- ^ a b Adleman, Leonard M.; Huang, Ming-Deh (1992). Primalitätstest und Abelsche Sorten über das endliche Feld. Vorlesungsnotizen in Mathematik. Vol. 1512. Springer-Verlag. ISBN 3-540-55308-8.
- ^ Chau, H. F.; Lo, H.-K. (1995). "Primalitätstest über Quantenfaktorisierung". Arxiv:Quant-Ph/9508005.
- ^ Pocklington, H. C. (1914). "Die Bestimmung der Prim- oder zusammengesetzten Natur großer Zahlen nach Fermat's Theorem". Cambr. Phil. SOC. Proc. 18: 29–30. JFM 45.1250.02.
- ^ Weisstein, Eric W. "Pocklingtons Theorem". Mathord.
- ^ Gary L. Miller (1976). "Riemanns Hypothese und Tests auf Primalität". Journal of Computer and System Sciences. 13 (3): 300–317. doi:10.1016/s0022-0000 (76) 80043-8.
- ^ a b Agrawal, Manindra; Kayal, Neeraj; Saxena, Nitin (2004). "Primes ist in P" (PDF). Annalen der Mathematik. 160 (2): 781–793. doi:10.4007/Annals.2004.160.781.
- ^ Agrawal, Manindra; Kayal, Neeraj; Saxena, Nitin (2004). "Primes ist in P" (PDF). Annalen der Mathematik. 160 (2): 781–793. doi:10.4007/Annals.2004.160.781.
- ^ Carl Pomerance & Hendrik W. Lenstra (20. Juli 2005). "Primalitätstests mit Gaußschen Perioden" (PDF).
- ^ Popovych, Roman (30. Dezember 2008). "Eine Notiz zur Agrawal -Vermutung" (PDF).
- ^ E. Allender, M. saks und d.h. Shparlinski, eine Untergrenze für die Primalität, J. Comp. System. Sci. 62 (2001), S. 356–366.
Quellen
- Richard Crandall und Carl Pomerance (2005). Primzahlen: Eine rechnerische Perspektive (2. Aufl.). Springer. ISBN 0-387-25282-7. Kapitel 3: Erkennen von Primzahlen und Verbundwerkstoffen, S. 109–158. Kapitel 4: Primalitätsprobleme, S. 159–190. Abschnitt 7.6: Elliptische Kurve -Primalitätsprobleme (ECPP), S. 334–340.
- Knuth, Donald (1997). "Abschnitt 4.5.4". Die Kunst der Computerprogrammierung. Vol. 2: Seminumerische Algorithmen (Dritter Aufl.). Addison -Wesley. S. 391–396. ISBN 0-201-89684-2.
- Thomas H. Cormen; Charles E. Leiserson; Ronald L. Rivest; Clifford Stein (2001). "Abschnitt 31.8: Primalitätstest". Einführung in Algorithmen (Zweite Ausgabe). MIT Press und McGraw -Hill. S. 887–896. ISBN 0-262-03293-7.
- Papadimitriou, Christos H. (1993). "Abschnitt 10.2: Primalität". Rechenkomplexität (1. Aufl.). Addison Wesley. pp.222–227. ISBN 0-201-53082-1. Zbl 0833.68049.
- Riesel, Hans (1994). Primzahlen und Computermethoden zur Faktorisierung. Fortschritte in der Mathematik. Vol. 126 (zweite Ausgabe). Boston, MA: Birkhäuser. ISBN 0-8176-3743-5. Zbl 0821.11001.
Externe Links
- Solovay-Strassen (computacion.cs.cinvestav.mx) bei Archive.Today (Archivierte 2012-12-20)-Implementierung des Solovay-Strassen-Primalitätstests in Maple
- Unterscheidung von Primzahlen von zusammengesetzten Zahlen von D.J. Bernstein (cr.yp.to)
- Die Hauptseiten (Primes.utm.edu)
- Lucas -Primalitätstest mit berücksichtigter N- 1 (mathpages.com) Bei der Kongressbibliothek Webarchive (archiviert 2010-08-06)
- Primaboinca ist ein Forschungsprojekt, das mit Internet verbundene Computer nach einem suchen Gegenbeispiel zu einigen Vermutungen. Die erste Vermutung (Agrawals Vermutung) war die Grundlage für die Formulierung des ersten deterministischen Prime -Testalgorithmus in der Polynomzeit (AKS -Algorithmus).