Station - Primzahltest
Einfache Testverfahren
Primzahlen sind bekanntlich natürliche Zahlen größer als 1, die nur durch 1 und sich selbst (ohne Rest) teilbar sind.
Beispiele:
2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, ...
Aufgabe 1
Aus der Primzahleigenschaft ergibt sich direkt ein einfacher Algorithmus, mit dem man bei einer natürlichen Zahl n überprüfen kann, ob es sich um eine Primzahl handelt.
(a) Formuliere den Algorithmus in Struktogrammform.
(b) Implementiere und teste den Algorithmus.
(c) Entwickle Möglichkeiten zur Verbesserungen des einfachen Algorithmus.
Praktischer Einsatz von einfachen Testverfahren
Für die Praxis benötigt man effiziente Testverfahren, die auch bei großen Zahlen (mit mehr als 600 Stellen) schnell ein Ergebnis liefern.
Im Folgenden betrachten wir erst ein einfaches Testverfahren:
Aufgabe 2
(a) Führe den Primzahltest erst mit kleinen Zahlen durch.
(b) Führe den Primzahltest auch mit einer größeren Primzahl durch, z. B. p = 1451985073868057639624096704831. Was stellst du fest?
Um genaueren Aufschluss über das Laufzeitverhalten des Primzahltests zu erhalten, werden jetzt systematische Laufzeitmessungen durchgeführt.
Man erhält z.B. die folgenden Ergebnisse:
Aufgabe 3
(a) Führe diese Messungen selbst durch. Beachte, dass du mit einem anderen Rechner wohl auch andere Messergebnisse erhältst.
(b) Versuche, anhand der Messergebnisse eine Gesetzmäßigkeit herauszufinden: Wenn n sich in etwa verzehnfacht, dann ... .
(c) Mit einer gefundenen Gesetzmäßigkeit kannst du jetzt abschätzen, wie lange es ungefähr dauert, bis p = 1451985073868057639624096704831 als Primzahl erkannt wird.
(d) Beim RSA-Verfahren benötigt man heute Primzahlen mit über 600 Stellen. Solche Primzahlen werden erzeugt, indem man Zahlen dieser Größenordnung zufällig erzeugt und dann testet, ob sie Primzahlen sind. Beurteile, ob sich einfache Testverfahren wie das oben gezeigte für diese Vorgehensweise eignen.
Praktischer Einsatz probabilistischer Testverfahren
In der Praxis benutzt man heute oft sogenannte probabilistische Testverfahren, da sie sehr effizient arbeiten. Probabilistischen Testverfahren funktionieren nach dem folgenden Prinzip: Bei Übergabe einer natürlichen Zahl n erhält man als Rückgabe entweder n ist keine Primzahl
oder n ist wahrscheinlich eine Primzahl
. Diese Testverfahren liefern also keine absolute Gewissheit, wenn sie das Ergebnis n ist wahrscheinlich eine Primzahl
produzieren. Die übergebene Zahl n kann mit einer bestimmten Wahrscheinlichkeit auch keine Primzahl sein. Allerdings ist diese Wahrscheinlichkeit sehr gering, so dass man die Unsicherheit oft in Kauf nimmt.
Eines dieser probabilistischer Testverfahren ist das Miller-Rabin-Verfahren, das im Folgenden getestet werden soll. Beachte, dass die Wiederholungszahl 20 (s.u.) die Fehlerwahrscheinlichkeit beeinflusst. Setzt man diese Wiederholungszahl auf einen größeren Wert, so nimmt die Fehlerwahrscheinlichkeit ab.
Man erhält die folgenden Ergebnisse:
Aufgabe 4
Vergleiche die Ergebnisse mit denen zum einfachen Testverfahren oben. Führe selbst auch entsprechende Tests durch.