- Pollard-p-1-Methode
-
Die Pollard-p-1-Methode ist ein Verfahren zur Faktorisierung von zusammengesetzten Zahlen. Sie wurde 1974 von John M. Pollard beschrieben.
Inhaltsverzeichnis
Mathematische Grundlagen
Die p-1 Faktorisierungsmethode von Pollard basiert auf dem kleinen fermatschen Satz. Sei p eine Primzahl, und a eine Zahl, die nicht von p geteilt wird, dann gilt
- .
Ebenso gilt dann für alle Vielfachen m von p-1. Das bedeutet, dass am-1 ein Vielfaches von p ist. Wenn nun N eine zu faktorisierende Zahl mit (unbekanntem) Primteiler p ist, teilt dieses p den ggT(am − 1,N), da es beide Zahlen teilt, von denen der ggT gebildet wurde. Meist ist dieser ggT ein echter Teiler von N. Im folgenden Absatz wird eine Methode beschrieben, wie man eine passende Zahl m finden kann.
Die 1. Phase des Verfahrens
Sei nun eine zu faktorisierende natürliche Zahl N gegeben. Insbesondere sei N eine zusammengesetzte Zahl. Man wählt eine Zahl a, die teilerfremd zu N ist. Anhand einer Heuristik bestimmt man eine weitere Zahl B, von der man annimmt, dass für jeden Primteiler p von N die Zahl p-1 B-potenzglatt ist. Das heißt, für jeden Primteiler q von p-1 gilt:
Die Zahl eq(p-1) bezeichnet den q-Exponenten von p-1. Er gibt an, wie oft die Zahl q in der Primfaktorzerlegung von p-1 auftritt. Ersetzt man in der Ungleichung die Zahl p-1 durch eine beliebige B-potenzglatte Zahl m, so bleibt die Ungleichung wahr. Umformen nach dem q-Exponenten liefert:
Sind B und q fix gewählt, so gibt diese Formel eine scharfe obere Grenze für den q-Exponenten an. Ist dieser größer als die rechte Seite der Ungleichung, so ist m nicht mehr B-potenzglatt. Man setzt nun
Das ist der größte q-Exponent, den eine B-potenzglatte Zahl m haben kann. Man erstellt als nächstes eine Liste F, in welcher die Primzahl q genau fq-mal vorkommt. Die Primzahlen in der Liste werden mit q1, q2, q3, ... , qR durchnummeriert, wobei R die Anzahl der Listenelemente von F ist. Das Produkt aller Zahlen in F wird mit M bezeichnet. Nach Konstruktion ist M B-potenzglatt. Es ist sogar die größte B-potenzglatte Zahl.
Besitzt N zumindest einen Primteiler p mit p-1 B-potenzglatt, so ist M ein Vielfaches dieser Zahl p-1. Es ist daher (siehe voriger Absatz) ggT(N,aM − 1) ein echter Teiler von N, oder gleich N. In der Regel reicht eine kleinere Potenz von a als die M-te aus, um einen Teiler zu erhalten. Die praktische Vorgehensweise ist daher die folgende: Man berechnet iterativ
- a0 = a
- für i = 1,...,R
Dabei werden in jedem Schritt die auftretenden Potenzen durch ihre Reste modulo N ersetzt. Nach einer bestimmten Anzahl von Schritten, z. B. dem 20., überprüft man, ob man bereits einen Teiler gefunden hat. Das heißt, man betrachtet ggT(a20 − 1,N). Ist dieser ggT größer als 1, so hat man einen Teiler bestimmt, und bricht das Verfahren ab; ist der ggT gleich 1, so fährt man in 20er-Schritten fort, bis man einen Teiler gefunden oder aR = aM erreicht hat.
Insgesamt können am Ende drei Fälle auftreten:
- Man findet einen echten Teiler von N. In diesem Fall war das Verfahren erfolgreich, und man hat N in zwei Faktoren zerlegt. Gegebenenfalls kann man das Verfahren erneut auf diese beiden Zahlen anwenden, bis man die Primfaktorzerlegung von N erhält, oder für einen der Faktoren von N Fall 3 auftritt.
- Man findet den Teiler N von N. Dieser Fall ist nicht besonders wahrscheinlich, kann aber auftreten. In diesem Fall ist es ratsam, einen anderen Wert für a zu wählen.
- Man findet den Teiler 1 von N. In diesem Fall war die Annahme, dass es einen Teiler p von N gibt, für den p-1 B-potenzglatt ist, falsch. In diesem Fall sollte man die 2. Phase der p-1-Methode starten.
Die 2. Phase des Verfahrens
Versagt das Verfahren in der 1. Phase, so liegt die Ursache oft darin, dass die für die Primfaktoren p von N gilt, dass . Dabei ist u B-glatt oder sogar B-potenzglatt, und l eine Primzahl, die größer als B ist. Mit anderen Worten: p-1 ist nur wegen eines einzigen Primfaktors nicht B-(potenz-)glatt.
Man wählt daher eine zweite Schranke B1, um den Faktor l „einzufangen“. B1 sollte wesentlich größer als B gewählt werden, aber nicht größer als B2. Häufig wählt man B1 im Bereich von B4/3.
Analog zur ersten Phase erstellt man die Liste F1 der Primzahlen die zwischen B und B1 liegen. Dabei speichert man die erste dieser Zahlen als l1, und trägt in die Liste die Differenzen zwischen benachbarten Primzahlen ein. Die Anzahl der Elemente von F1 sei S. Beachte: Für B1 < 20.000.000 ist jede dieser Differenzen kleiner oder gleich 200. Es treten also nur wenige, und nur kleine Differenzen auf.
Als Startwert für die 2. Phase dient die Zahl aR, welche am Ende der 1. Phase berechnet wurde. Als weitere Vorbereitung berechnet man für jede Differenz d in F1 die Zahl
- (genauer: den Rest dieser Zahl modulo N)
Einerseits müssen hier nur wenige jd berechnet werden, andererseits wird nur eine kleine Potenz benötigt. Wie in Phase 1 startet man nun wieder eine Iteration. Dabei kann man das aufwändige Potenzieren durch Multiplikationen ersetzen.
- für i = 2,3,...,S
Dabei sei di die Differenz zwischen der (i-1)-ten und der i-ten Primzahl in F1. Wiederum ersetzt man die Zahlen in jedem Schritt durch ihre Reste modulo N.
Anders als in Phase 1 reicht es nicht aus, nach einer festen Anzahl von Schritten den ggT(aR + i − 1,N) zu bilden. Stattdessen muss man die Zahlen aR+i-1 akkumulieren, d. h. man bildet das Produkt all dieser Zahlen. Das kann im Zuge der obigen Iteration mit erledigt werden, indem man z1=aR+1-1, und zi=zi-1*(aR+i-1) setzt. Durch das Akkumulieren erreicht man, dass auch Primfaktoren p von N gefunden werden können, bei denen mehr als ein Primfaktor von p-1 größer als B ist.
Nach einer festen Anzahl von Schritten, etwa wieder jedem 20., bildet man ggT(zi,N). Wieder können am Ende die drei Fälle auftreten, die am Ende von Phase 1 auftreten konnten. Versagt das Verfahren, so kann man die Schranken B und B1 vergrößern, und das Verfahren erneut starten. Besser ist es allerdings, in diesem Fall ein anderes Verfahren zu verwenden.
Die Heuristik des größten Primteilers
Eine natürliche Zahl m hat im Durchschnitt log log m Primteiler. Diese Aussage lässt sich präzise formulieren und beweisen. Man tut so als hätte die Anzahl der Primteiler von m genau diesen Wert, d. h. man nimmt an, dass
Es sei nun q der größte Primteiler von m. Dann gilt:
Auflösen dieser Gleichung nach q liefert:
Dabei ist e die Eulersche Zahl. Das ist eine heuristische Begründung dafür, dass der größte Primteiler von m etwa gleich m0.632 ist. Dieser Sachverhalt wird genutzt, um einen Wert für die Suchschranke B aus dem obigen Verfahren zu bestimmen.
Anwendung auf das Verfahren
Sei nun N eine zusammengesetzte natürliche Zahl, auf die man die p-1-Methode anwenden möchte. Da sie zusammengesetzt ist, besitzt sie einen Primteiler p ≤ . Nach der Heuristik gilt für den größten Primteiler q von p-1
Wählt man also B ≥ N0,316, so ist zu erwarten, dass p-1 B-glatt ist. Die B-Potenzglattheit lässt sich nun so erreichen: Angenommen p-1 sei B-glatt. Dann gilt für alle Primteiler q von p-1:
Wie in der Beschreibung der 1. Phase (siehe oben) erhält man daraus für eine B-potenzglatte Zahl m:
Die Zahl fq ist hier dieselbe, die in der 1. Phase berechnet wurde.
Das bedeutet: Für diese Wahl von B muss man die Werte der fq durch die etwas größeren Werte 1,6 * fq ersetzen, um die B-Potenzglattheit der p-1 zu erreichen.
In der Praxis legt man einen Wert für B fest, und schließt umgekehrt, für welche Werte von N diese Schranke ausreichend ist. Hierfür gilt:
Gibt man sich also die Schranke B=10.000 vor, so lassen sich damit alle N behandeln, die kleiner oder gleich 4,5*1012 sind.
Komplexität des Verfahrens
Aus der Abschätzung B ≥ N0,316 ergibt sich eine Komplexität des Verfahrens von:
Der Aufwand ist exponentiell in der Länge der Eingabe.
Anwendungen
Die Pollard-p-1-Methode wird unter anderem von GIMPS (Great Internet Mersenne Prime Search) verwendet, um Zahlen der Gestalt 2p − 1 zu faktorisieren und damit die Anzahl der für die Suche nach Mersenne-Primzahlen notwendigen zeitaufwändigen Lucas-Lehmer-Tests verringern.
Literatur
G. Tenenbaum: Introduction to Analytic and Probabilistic Number Theory. S. 41, Th. 6.
Wikimedia Foundation.