Ü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