Ubungen zur Computeralgebra — Blatt 9

Werbung
Übungen zur Computeralgebra — Blatt 9
Dr. D. Vogel
Dr. A. Maurischat
Sommersemester 2012,
Abgabe: 20.6.2012, 9.00 Uhr
32. Aufgabe: (4 Punkte)
(a) Sei xi+1 := f (xi ) eine rekursiv definierte Folge mit Startwert x0 ∈ Z und einer Polynomfunktion f : Z → Z (d.h. f ist durch einen polynomialen Ausdruck mit ganzzahligen Koeffizienten gegeben). Für 0 < i < j seien l(j) := blog2 (j)c, i0 := 2l(j)+1 −1 und j 0 := i0 +(j −i).
Zeigen Sie: Ist p eine Primzahl mit p | (xj − xi ), so gilt: p | (xj 0 − xi0 ). Des weiteren gelten
0
i0 < j 0 < 2i0 < 4j und i0 = 2l(j ) − 1.
(b) Wir betrachten den folgenden Algorithmus zur möglichen Bestimmung eines Teilers einer
natürlichen Zahl:
Eingabe: n ∈ N, f : Z → Z Polynomfunktion, x0 ∈ Z und d ∈ N.
Ausgabe: Einen echten Teiler von n oder Fehler“, falls kein echter
”
Teiler gefunden wurde.
(1) Für k := 0 bis d führe (2)–(6) aus
(2) i := 2k − 1
(3) Für j := 2k bis 2k+1 − 1 führe (4)–(6) aus
(4)
xj := f (xj−1 ) (mod n)
(5)
t := ggT(xj − xi , n)
(6)
Falls 1 < t < n ist, gib t zurück.
(7) Gib Fehler“ aus.
”
(1) Zählen Sie die Anzahl der ggT-Berechnungen, die in diesem Algorithmus maximal
gemacht werden.
(2) Zeigen Sie mit Hilfe von (a): Gibt es einen Primteiler p von n und Indizes 0 < r <
s < 2d−1 mit xr ≡ xs (mod p), so ist t in Punkt (5) nicht immer gleich 1.
(3) Vergleichen Sie diesen Algorithmus mit der Pollard-ρ-Methode aus der Vorlesung.
Welcher Algorithmus wird statistisch schneller einen Faktor von n liefern (sofern n
keine Primzahl ist)?
33. Aufgabe: (6 Punkte)
(a) Implementieren Sie in Magma den Sieb des Eratosthenes für natürliche Zahlen. Eingabeparameter ist dabei die Zahl n, bis zu der gesiebt wird.
(b) Implementieren Sie in Magma analog zu Teil (a) einen Sieb des Eratosthenes für normierte Polynome über einem endlichen Primkörper Fp . Hier sind die Eingabeparameter der
maximale Grad n der Polynome und die Kardinalität p des Primkörpers.
34. Aufgabe: (6 Punkte)
(a) Implementieren Sie in Magma eine Funktion
MeinPollardRho(n: s:=Floor(Sqrt(n)), x0:=Random(1,n), f:=func<x|(x^2+1) mod n>),
die den Pollard-ρ-Algorithmus (Variante von Algorithmus 9.8) durchführt. Fester Parameter ist dabei die Zahl n, die auf Primzahl getestet wird. Optionale Parameter der Funktion
sind die Anzahl der Schleifendurchläufe s (default: Floor(Sqrt(n))), der Startwert x0
(default: eine zufällige Zahl zwischen 1 und n − 1) und eine Iterierungsfunktion f (default:
die Funktion x 7→ (x2 + 1) (mod n)). Rückgabewert der Funktion ist ein Teiler, sofern er
gefunden wurde, oder der Wert 0.
(b) Testen Sie mit Hilfe der Funktion MeinPollardRho, ob 1007 eine Primzahl ist. Untersuchen
Sie auch, welche Startwerte zum Erfolg führen, und bei welchen Startwerten die Zahl der
Schleifendurchläufe am geringsten ist (stets mit Iterierungsfunktion x 7→ (x2 +1) (mod n)).
(c) Führen Sie (per Hand/mit Taschenrechner) den Pollard-ρ-Algorithmus für die Zahl 1007
mit Startwert x0 = 1 und Iterierungsfunktion f (x) = (x2 + 1) (mod n) durch und geben
Sie dabei insbesondere die berechneten Folgen xi und yi an.
8
(d) Berechnen Sie mit Ihrer Funktion MeinPollardRho einen Teiler der Fermat-Zahl 2(2 ) + 1
und lassen Sie Magma die Dauer der Berechnung messen.
Bemerkung: Die Berechnung des Teilers der Fermat-Zahl kann auch gut eine halbe Stunde dauern.
Ein Link zum aktuellen Stand der Faktorisierung von Fermat-Zahlen.
Die Übungsblätter sowie weitere Informationen zur Vorlesung Computeralgebra finden Sie unter
http://www.iwr.uni-heidelberg.de/~Andreas.Maurischat/compalg-ss2012
Herunterladen