2.3.4. Lucas Primzahlentest

Der Primzahlentest von Lucas basiert auf folgendem 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.

Für eine schnellere Berechnung ist der kleine Satz von Fermat nützlich:

Sei p eine beliebige Primzahl. Für alle 0<a<p gilt: ap-1 mod p = 1.

d.h. wir können die Berechnung mit dem Ergebnis "p ist zusammengesetzt" abbrechen, wenn wir ein r gefunden haben, daß die Bedingung 1) nicht erfüllt.

Lucas Algorithmus:

for r=2 to p-1
    if rp-1 mod p = 1 then
        Berechne alle Primfaktoren Q von p-1
        for (all q in Q) do
            if r(p-1)/q mod p=1 then
                next r
            else
                next q
            end
        end
        write "p ist eine Primzahl"
        goto ENDE
    else
        write "p ist zusammengesetzt"
        goto ENDE
    end
end
ENDE:

Applet Lucastest:
Das Applet bestimmt zuerst alle r, für die Bedingung 1) zutrifft und stellt sie in der linken Auswahlliste dar. Anschließend können, durch Auswahl eines bestimmten r Werts, in der rechten Liste die Ergebnisse der Bedingung 2) für alle Primfaktoren q von p-1 und gewähltes r angezeigt werden.

Quellcode:
Lucas.java – Appletoberfläche und –steuerung
Prime.java – Primzahlenfunktionen

2.3.5 Pratt Primzahlentest