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.

Mathematische Grundlagen

Die p 1 {\displaystyle p-1} -Faktorisierungsmethode von Pollard basiert auf dem kleinen fermatschen Satz. Sei p {\displaystyle p} eine Primzahl, und a {\displaystyle a} eine Zahl, die nicht von p {\displaystyle p} geteilt wird, dann gilt

a p 1 1 ( mod p ) {\displaystyle a^{p-1}\equiv 1{\pmod {p}}} .

Ebenso gilt dann a m 1 ( mod p ) {\displaystyle a^{m}\equiv 1{\pmod {p}}} für alle Vielfachen m {\displaystyle m} von p 1 {\displaystyle p-1} . Das bedeutet, dass a m 1 {\displaystyle a^{m}-1} ein Vielfaches von p {\displaystyle p} ist. Wenn nun N {\displaystyle N} eine zu faktorisierende Zahl mit (unbekanntem) Primteiler p {\displaystyle p} ist, teilt dieses p {\displaystyle p} den ggT ( a m 1 , N ) {\displaystyle \operatorname {ggT} (a^{m}-1,N)} , da es beide Zahlen teilt, von denen der ggT gebildet wurde. Meist ist dieser ggT ein echter Teiler von N {\displaystyle N} . Im folgenden Absatz wird eine Methode beschrieben, wie man eine passende Zahl m {\displaystyle m} finden kann.

Die 1. Phase des Verfahrens

Sei nun eine zu faktorisierende natürliche Zahl N {\displaystyle N} gegeben. Insbesondere sei N {\displaystyle N} eine zusammengesetzte Zahl. Man wählt eine Zahl a {\displaystyle a} , die teilerfremd zu N {\displaystyle N} ist. Anhand einer Heuristik bestimmt man eine weitere Zahl B {\displaystyle B} , von der man annimmt, dass für jeden Primteiler p {\displaystyle p} von N {\displaystyle N} die Zahl p 1 {\displaystyle p-1} B {\displaystyle B} -potenzglatt ist. Das heißt, für jeden Primteiler q {\displaystyle q} von p 1 {\displaystyle p-1} gilt:

q e q ( p 1 ) B {\displaystyle q^{e_{q}\left(p-1\right)}\leq B}

Die Zahl e q ( p 1 ) {\displaystyle e_{q}(p-1)} bezeichnet den q {\displaystyle q} -Exponenten von p 1 {\displaystyle p-1} . Er gibt an, wie oft die Zahl q {\displaystyle q} in der Primfaktorzerlegung von p 1 {\displaystyle p-1} auftritt. Ersetzt man in der Ungleichung die Zahl p 1 {\displaystyle p-1} durch eine beliebige B {\displaystyle B} -potenzglatte Zahl m {\displaystyle m} , so bleibt die Ungleichung wahr. Umformen nach dem q {\displaystyle q} -Exponenten liefert:

e q ( m ) log B log q {\displaystyle e_{q}\left(m\right)\leq {\frac {\log B}{\log q}}}

Sind B {\displaystyle B} und q {\displaystyle q} fix gewählt, so gibt diese Formel eine scharfe obere Grenze für den q {\displaystyle q} -Exponenten an. Ist dieser größer als die rechte Seite der Ungleichung, so ist m {\displaystyle m} nicht mehr B {\displaystyle B} -potenzglatt. Man setzt nun

f q = log B log q {\displaystyle f_{q}=\left\lfloor {\frac {\log B}{\log q}}\right\rfloor }

Das ist der größte q {\displaystyle q} -Exponent, den eine B {\displaystyle B} -potenzglatte Zahl m {\displaystyle m} haben kann. Man erstellt als Nächstes eine Liste F {\displaystyle F} , in welcher die Primzahl q {\displaystyle q} genau f q {\displaystyle f_{q}} -mal vorkommt. Die Primzahlen in der Liste werden mit q 1 , q 2 , q 3 , , q R {\displaystyle q_{1},q_{2},q_{3},\ldots ,q_{R}} durchnummeriert, wobei R {\displaystyle R} die Anzahl der Listenelemente von F {\displaystyle F} ist. Das Produkt aller Zahlen in F {\displaystyle F} wird mit M {\displaystyle M} bezeichnet. Nach Konstruktion ist M {\displaystyle M} B {\displaystyle B} -potenzglatt. Es ist sogar die größte B {\displaystyle B} -potenzglatte Zahl.

Besitzt N {\displaystyle N} zumindest einen Primteiler p {\displaystyle p} mit p 1 {\displaystyle p-1} B {\displaystyle B} -potenzglatt, so ist M {\displaystyle M} ein Vielfaches dieser Zahl p 1 {\displaystyle p-1} . Es ist daher (siehe voriger Absatz) ggT ( N , a M 1 ) {\displaystyle \operatorname {ggT} (N,a^{M}-1)} ein echter Teiler von N {\displaystyle N} , oder gleich N {\displaystyle N} . In der Regel reicht eine kleinere Potenz von a {\displaystyle a} als die M {\displaystyle M} -te aus, um einen Teiler zu erhalten. Die praktische Vorgehensweise ist daher die folgende: Man berechnet iterativ

a 1 = a {\displaystyle a_{1}=a}
a i + 1 = a i q i {\displaystyle a_{i+1}=a_{i}^{q_{i}}} für i = 1 , . . . , R {\displaystyle i=1,...,R}

Dabei werden in jedem Schritt die auftretenden Potenzen durch ihre Reste modulo N {\displaystyle 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 ( a 20 1 , N ) {\displaystyle \operatorname {ggT} (a_{20}-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 a R = a M {\displaystyle a_{R}=a^{M}} erreicht hat.

Insgesamt können am Ende drei Fälle auftreten:

  1. Man findet einen echten Teiler von N {\displaystyle N} . In diesem Fall war das Verfahren erfolgreich, und man hat N {\displaystyle N} in zwei Faktoren zerlegt. Gegebenenfalls kann man das Verfahren erneut auf diese beiden Zahlen anwenden, bis man die Primfaktorzerlegung von N {\displaystyle N} erhält, oder für einen der Faktoren von N {\displaystyle N} Fall 3 auftritt.
  2. Man findet den Teiler N {\displaystyle N} von N {\displaystyle N} . Dieser Fall ist nicht besonders wahrscheinlich, kann aber auftreten. In diesem Fall ist es ratsam, einen anderen Wert für a {\displaystyle a} zu wählen.
  3. Man findet den Teiler 1 von N {\displaystyle N} . In diesem Fall war die Annahme, dass es einen Teiler p {\displaystyle p} von N {\displaystyle N} gibt, für den p 1 {\displaystyle p-1} B {\displaystyle B} -potenzglatt ist, falsch. In diesem Fall sollte man die 2. Phase der p 1 {\displaystyle p-1} -Methode starten.

Die 2. Phase des Verfahrens

Versagt das Verfahren in der 1. Phase, so liegt die Ursache oft darin, dass für die Primfaktoren p {\displaystyle p} von N {\displaystyle N} gilt, dass p 1 = u l {\displaystyle p-1=u\cdot l} . Dabei ist u {\displaystyle u} B-glatt oder sogar B-potenzglatt, und l {\displaystyle l} eine Primzahl, die größer als B {\displaystyle B} ist. Mit anderen Worten: p 1 {\displaystyle p-1} ist nur wegen eines einzigen Primfaktors nicht B-(potenz-)glatt.

Man wählt daher eine zweite Schranke B 1 {\displaystyle B_{1}} , um den Faktor l {\displaystyle l} „einzufangen“. B 1 {\displaystyle B_{1}} sollte wesentlich größer als B {\displaystyle B} gewählt werden, aber nicht größer als B 2 {\displaystyle B^{2}} . Häufig wählt man B 1 {\displaystyle B_{1}} im Bereich von B 4 3 {\displaystyle B^{\frac {4}{3}}} .

Analog zur ersten Phase erstellt man die Liste F 1 {\displaystyle F_{1}} der Primzahlen die zwischen B {\displaystyle B} und B 1 {\displaystyle B_{1}} liegen. Dabei speichert man die erste dieser Zahlen als l 1 {\displaystyle l_{1}} und trägt in die Liste die Differenzen zwischen benachbarten Primzahlen ein. Die Anzahl der Elemente von F 1 {\displaystyle F_{1}} sei S {\displaystyle S} . Beachte: Für B 1 < 20.000.000 {\displaystyle B_{1}<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 a R {\displaystyle a_{R}} , welche am Ende der 1. Phase berechnet wurde. Als weitere Vorbereitung berechnet man für jede Differenz d {\displaystyle d} in F 1 {\displaystyle F_{1}} die Zahl

j d = a R d {\displaystyle j_{d}=a_{R}^{d}} (genauer: den Rest dieser Zahl modulo N {\displaystyle N} )

Einerseits müssen hier nur wenige j d {\displaystyle j_{d}} 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.

a R + 1 = a R l 1 {\displaystyle a_{R+1}=a_{R}^{l_{1}}}
a R + i = a R + i 1 j d i = a R l i 1 a R d i = a R l i 1 + d i = a R l i {\displaystyle a_{R+i}=a_{R+i-1}\cdot {j_{d}}_{i}=a_{R}^{l_{i-1}}\cdot a_{R}^{d_{i}}=a_{R}^{l_{i-1}+d_{i}}=a_{R}^{l_{i}}} für i = 2 , 3 , . . . , S {\displaystyle i=2,3,...,S}

Dabei sei d i {\displaystyle d_{i}} die Differenz zwischen der ( i 1 ) {\displaystyle (i-1)} -ten und der i {\displaystyle i} -ten Primzahl in F 1 {\displaystyle F_{1}} . Wiederum ersetzt man die Zahlen in jedem Schritt durch ihre Reste modulo N {\displaystyle N} .

Anders als in Phase 1 reicht es nicht aus, nach einer festen Anzahl von Schritten den ggT ( a R + i 1 , N ) {\displaystyle \operatorname {ggT} (a_{R+i}-1,N)} zu bilden. Stattdessen muss man die Zahlen a R + i 1 {\displaystyle a_{R+i}-1} akkumulieren, d. h. man bildet das Produkt all dieser Zahlen. Das kann im Zuge der obigen Iteration mit erledigt werden, indem man z 1 = a R + 1 1 {\displaystyle z_{1}=a_{R+1}-1} , und z i = z i 1 ( a R + i 1 ) {\displaystyle z_{i}=z_{i-1}(a_{R+i}-1)} setzt. Durch das Akkumulieren erreicht man, dass auch Primfaktoren p {\displaystyle p} von N {\displaystyle N} gefunden werden können, bei denen mehr als ein Primfaktor von p 1 {\displaystyle p-1} größer als B {\displaystyle B} ist.

Nach einer festen Anzahl von Schritten, etwa wieder jedem 20., bildet man ggT ( z i , N ) {\displaystyle \operatorname {ggT} (z_{i},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 {\displaystyle B} und B 1 {\displaystyle B_{1}} 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 {\displaystyle m} hat im Durchschnitt log log m {\displaystyle \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 {\displaystyle m} genau diesen Wert, d. h., man nimmt an, dass

ω ( m ) = log log m {\displaystyle \omega \left(m\right)=\log \log m}

Es sei nun q {\displaystyle q} der größte Primteiler von m {\displaystyle m} . Dann gilt:

ω ( m q ) = ω ( m ) 1 {\displaystyle \omega \left({\frac {m}{q}}\right)=\omega (m)-1}

Auflösen dieser Gleichung nach q {\displaystyle q} liefert:

q = m 1 1 e {\displaystyle q=m^{1-{\frac {1}{e}}}}

Dabei ist e {\displaystyle e} die Eulersche Zahl. Das ist eine heuristische Begründung dafür, dass der größte Primteiler von m {\displaystyle m} etwa gleich m 0,632 {\displaystyle m^{0{,}632}} ist. Dieser Sachverhalt wird genutzt, um einen Wert für die Suchschranke B {\displaystyle B} aus dem obigen Verfahren zu bestimmen.

Anwendung auf das Verfahren

Sei nun N {\displaystyle N} eine zusammengesetzte natürliche Zahl, auf die man die p 1 {\displaystyle p-1} -Methode anwenden möchte. Da sie zusammengesetzt ist, besitzt sie einen Primteiler p N {\displaystyle p\leq {\sqrt {N}}} . Nach der Heuristik gilt für den größten Primteiler q {\displaystyle q} von p 1 {\displaystyle p-1}

q ( p 1 ) 1 1 e n 1 2 ( 1 1 e ) n 0,316 {\displaystyle q\leq \left(p-1\right)^{1-{\frac {1}{e}}}\leq n^{{\frac {1}{2}}(1-{\frac {1}{e}})}\approx n^{0{,}316}}

Wählt man also B N 0,316 {\displaystyle B\geq N^{0{,}316}} , so ist zu erwarten, dass p 1 {\displaystyle p-1} B {\displaystyle B} -glatt ist. Die B {\displaystyle B} -Potenzglattheit lässt sich nun so erreichen: Angenommen p 1 {\displaystyle p-1} sei B {\displaystyle B} -glatt. Dann gilt für alle Primteiler q {\displaystyle q} von p 1 {\displaystyle p-1} :

q e q ( p 1 ) n 1 2 B e e 1 {\displaystyle q^{e_{q}(p-1)}\leq n^{\frac {1}{2}}\leq B^{\frac {e}{e-1}}}

Wie in der Beschreibung der 1. Phase (siehe oben) erhält man daraus für eine B {\displaystyle B} -potenzglatte Zahl m {\displaystyle m} :

e q ( m ) e e 1 log B log q 1 , 6 f q {\displaystyle e_{q}(m)\leq \left\lfloor {\frac {e}{e-1}}{\frac {\log B}{\log q}}\right\rfloor \approx 1{,}6\cdot f_{q}}

Die Zahl f q {\displaystyle f_{q}} ist hier dieselbe, die in der 1. Phase berechnet wurde.

Das bedeutet: Für diese Wahl von B {\displaystyle B} muss man die Werte der f q {\displaystyle f_{q}} durch die etwas größeren Werte 1 , 6 f q {\displaystyle 1{,}6\cdot f_{q}} ersetzen, um die B {\displaystyle B} -Potenzglattheit der p 1 {\displaystyle p-1} zu erreichen.

In der Praxis legt man einen Wert für B {\displaystyle B} fest und schließt umgekehrt, für welche Werte von N {\displaystyle N} diese Schranke ausreichend ist. Hierfür gilt:

N B 2 e e 1 B 3,164 {\displaystyle N\leq B^{2{\frac {e}{e-1}}}\approx B^{3{,}164}}

Gibt man sich also die Schranke B = 10.000 {\displaystyle B=10.000} vor, so lassen sich damit alle N {\displaystyle N} behandeln, die kleiner oder gleich 4 , 5 10 12 {\displaystyle 4{,}5\cdot 10^{12}} sind.

Komplexität des Verfahrens

Aus der Abschätzung B N 0,316 {\displaystyle B\geq N^{0{,}316}} ergibt sich eine Komplexität des Verfahrens von:

O ( N 3 ) {\displaystyle O({\sqrt[{3}]{N}})}

Der Aufwand wächst exponentiell mit 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 2 p 1 {\displaystyle 2^{p}-1} zu faktorisieren und damit die Anzahl der für die Suche nach Mersenne-Primzahlen notwendigen zeitaufwändigen Lucas-Lehmer-Tests zu verringern.

Literatur

  • G. Tenenbaum: Introduction to Analytic and Probabilistic Number Theory. S. 41, Th. 6.