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