2.3.5. Pratt Primzahlentest
Der Primzahlentest von Pratt ist dem von Lucas sehr �hnlich. Beide basieren auf dem selben Satz:
Eine Zahl p>1 ist prim, genau dann wenn: Es gibt eine Zahl r mit
1<r<p, so da� gilt
1) rp-1 mod p = 1
2) f�r alle Primfaktoren q von p-1 gilt: r(p-1)/q mod p � 1.
Ein Zeuge f�r die Primalit�t von p sieht also folgenderma�en aus: Z(p) = (r; q1; q2; ...; qn).
Um zu testen, ob alle qi tats�chlich Primzahlen sind, wendet man die Konstruktion rekursiv an.
Z(2) = (1)
Z(p) = (r), falls p-1 prim ist
Z(p) = (r; q1, Z(q1); q2, Z(q2); ...; qn, Z(qn)), sonst.
Man erh�lt also eine Sequenz (r, q1, Z(q11, Z(q11),...), ..., qn, Z(qn1, Z(qn1), ...). F�r diese werden dann jeweils die Bedingungen des obigen Satzes getestet.
Der Pratt Algorithmus r�t diese Sequenz nichtdeterministisch.
Beispiel:
F�r p=31 r�t der Algorithmus: Z(31) = (3; 2, (1), 3, (2; 2, (1)), 5, (2; 2, (1), 2, (1))
oder etwas �bersichtlicher:
r=3 |
|
|
q1=2 |
Z(q1)=1 |
|
q2=3 |
r2=2 |
|
|
q21=2 |
Z(q21)=1 |
q3=5 |
r3=2 |
|
|
q31=2 |
Z(q31)=1 |
|
q32=2 |
Z(q32)=1 |
Dann verifiziert man:
331-1 = 1 mod 31 |
23-1 = 1 mod 3 |
25-1 = 1 mod 5 |
330/2 # 1 mod 31 |
22/2 # 1 mod 3 |
24/2 # 1 mod 5 |
330/3 # 1 mod 31 |
|
|
330/5 # 1 mod 31 |
|
|
Applet Pratt-Test:
Quellcode:
Pratt.java � Appletoberfl�che und �steuerung
Prime.java � Primzahlenfunktionen
2.4.1 AKS Primzahltest |