Thorsten Reinecke
Der (p-1)-Algorithmus zur Faktorisierung natürlicher Zahlen basiert auf dem sogenannten kleinen Fermatschen Satz:
prim
für
Dieser Sachverhalt wird häufig für Vorstufen verschiedener Primzahltests verwendet,
in dem man für verschiedene Basen
berechnet. Falls der
Ausdruck ungleich 1 wird, weiß man, daß die Zahl zusammengesetzt sein muß. Andernfalls
``verstärkt'' sich die Annahme, daß die Zahl prim sein könnte.
Der kleine Fermatsche Satz läßt sich jedoch auch zur Faktorisierung natürlicher
Zahlen einsetzen. Nehmen wir an, wäre unser gesuchter Primfaktor. Nehmen
wir ferner an, wir hätten bereits für kleinere Primfaktoren Probedivision durchgeführt.
Dann zerfällt
in mindestens zwei Faktoren:
.
Mit einiger Wahrscheinlichkeit ist
sogar noch weiter zerlegbar.
Und genau diese Hoffnung hegt man bei der (p-1)-Faktorisierungsmethode. Man
rät sukzessive mögliche kleine Faktoren von
.
Seien
diese gewählten Zahlen und
eine gewählte Basis, dann wäre
.
Dies läßt sich mit den Potenzgesetzen umformulieren zu
.
Nun sieht man auch, daß falsch geratene Faktoren von
die Kongruenz
trotzdem erhalten, da die Basis
unter den oben genannten Einschränkungen
beliebig gewählt werden kann, somit also falsche
in die Basis gezogen
werden können.
Ein Problem verbleibt allerdings noch: Da wir nicht kennen, können
wir die Kongruenz nicht bilden. Dies stört allerdings wenig, da für eine gegebene
Zahl
, deren Faktor
wir suchen, folgendes gilt:
.
Falls
gilt, so gilt
und somit
. Wenn
nun
ist (und dies ist ein sehr wahrscheinlicher Fall!), so erhalten
wir durch
den gewünschten
Teiler
.
Ein praktikabler Algorithmus ergibt sich daraus, in dem man sich eine Basis
wählt und dann alle Primzahlen (und ggf. Primzahlpotenzen) bis zu einer
vorher festgelegten Obergrenze als Exponenten verwendet. In regelmäßigen Abständen
testet man dann den ggT von
und
. - Der in der Literatur
manchmal beschriebene Akkumulationsschritt, bei welchem nach jedem Exponentiationsschritt
die neu erhaltene Basis um eins vermindert mit einer Sammelvariablen zu multiplizieren
ist, um den ggT-Test anschließend mit der Sammelvariablen durchführen zu können,
ist aufgrund des Kleinen Fermatschen Satzes unnötig. Nichts desto trotz kann
die Akkumulation in vielen anderen Algorithmen die kostenintensiven ggT-Berechnungen
erheblich reduzieren und ist auch bei der Bestimmung multiplikativer, von einander
unabhängiger Inversen vorteilhaft einsetzbar.
Falls der Grundalgorithmus versagt, kann man eine zweite Phase anhängen. Diese
zweite Phase ist erfolgreich, wenn durch den Grundalgorithmus bis
auf einen Primfaktor zerlegt werden konnte. Dieser übriggebliebene Restfaktor
kann nun ohne teure Exponentiation ermittelt werden, in dem man ein
mit einer Primzahl
in der Größenordnung des vermuteten
bestimmt und mittels Multiplikation die Umgebung von
nach
absucht. Hierfür kann man sich eine Tabelle kleiner Potenzen von
anlegen, um die Abstände zwischen den Primzahlen jeweils durch eine Multiplikation
überwinden zu können:
. Diese Phase
schließt erfolgreich ab, falls
und somit
den Teiler liefert. Man beachte, daß die Basis
nicht die Ursprungsbasis
ist, sondern die nach Abschluß des Standard-Algorithmus erhaltene Basis.
Wenn man so will, kann man die Operationen als Ringoperationen auffassen. Phase 1 hat den Ring komprimiert (die Standard-Exponentiation auf den natürlichen Zahlen entspricht der multiplikativen Ring-Operation). In Phase 2 sucht man den komprimierten Ring durch additive Operationen ab.
In der Literatur sind weitere, wesentlich effizientere Methoden für Phase 2 als die hier beschriebene standard continuation entwickelt worden.
In der Literatur finden sich für die erste Phase eigentlich keine Verbesserungsvorschläge.
Wenn man den (p-1)-Algorithmus nur ergänzend zu anderen Algorithmen einsetzt, dann wird man Phase 1 möglichst kurz halten und darauf spekulieren, den Teiler in Phase 2 zu ermitteln zu können. Falls auch Phase 2 versagt, dann war die Zahl eben nicht für den (p-1)-Algorithmus geeignet. - Diese Vorgehensweise ist durchaus legitim.
Ein möglicher Nachteil des oben beschriebenen Vorgehens liegt allerdings darin, die Phase 1 zu früh abzubrechen. Eine zu große Verlängerung der Phase 1 hingegen kostet unnötige Zeit.
Eine Lösung bestünde darin, die Phase 1 substantiell zu beschleunigen. Dies ist bisher nicht gelungen.
Eine abgeschwächte Verbesserung der Phase 1 wäre erreichbar, wenn man die Phase 1 mit geringen Kosten um Elemente der Phase 2 ergänzen könnte. Die Phase 1 könnte dann mit einer wesentlich höheren Obergrenze durchlaufen werden, weil quasi parallel eine Art ``Phase 2'' abläuft. Basierend auf dem Grundalgorithmus ist dies tatsächlich möglich und die zusätzlichen Kosten sind mit denen der standard-continuation vergleichbar. Ob sich allerdings die Modifikationen lohnen, bedarf weiterer Untersuchungen. Hier bin ich eher skeptisch, da man die (p-1)-Methode - wenn überhaupt - dann nur ergänzend vor den elliptischen Kurven und/oder dem Quadratischen Sieb einsetzt. Dadurch dominiert von der Bedeutung her die Phase 2.
In einer Standalone-Anwendung des (p-1)-Verfahrens würde hingegen Phase 1 dominieren, da man nicht riskieren könnte, das Verfahren mit Phase 2 erfolglos zu beenden.
Die erforderlichen Modifikationen sind relativ simpel. Wir betrachten die fortlaufenden
Werte der Basis als Folge, die durch den Startwert und eine Folge
von Exponenten
bestimmt werden:
.
Wir definieren ferner
für negative
.
Das (p-1)-Standardverfahren sieht dann etwa folgendermaßen aus:
; repeat
until
;
Das modifizierte Verfahren sieht so aus:
; repeat
;
until
;
Das modifizierte Verfahren ergänzt das Standardverfahren um zusätzliche Faktoren,
da für z.B.
gilt und somit ein Teiler lediglich eine Auswertung später
entdeckt wird. Hingegen können zusätzliche Faktoren durch den Summenausdruck
hinzukommen, die bei jedem Auswertungsschritt variieren. Über die Höhe des Delta
kann die Größe des zusätzlichen Faktors eingestellt werden. Dieser dürfte seinerseits
mit einiger Wahrscheinlichkeit in weitere Primfaktoren zerfallen. Auf diese
Weise erhält man eine Art ``Phase 2'' bereits innerhalb der Grundphase.
Allgemein gilt:
Der obige Term sieht relativ kompliziert aus; tatsächlich geht es jedoch nur um den Nachweis der Tatsache, daß das Verfahren durch Berechnung der linken Seite auch bei anderen Deltawerten zusätzliche Faktoren (rechte Seite) gegenüber dem Standardverfahren produziert.
Die zusätzlichen Kosten der Modifikation der Phase 1 sind relativ gering. Es
ist ein Ringpuffer für die Basen anzulegen. Dieser kann als Array der Größe
realisiert werden. Der Zugriff erfolgt dann über die Indices
modulo
.
Nehmen wir an,
bestehe aus zwei annähernd gleichen Teilern.
- Dies ist der einzige Sonderfall, wo die Fermatmethode den anderen Faktorisierungsmethoden
deutlich überlegen ist.
Vorausgesetzt, daß und
große Primzahlen sind, läßt sich auch
hier eine modifizierte (p-1)-Methode anwenden.
Wir gehen zunächst von folgender Kongruenz aus:
Dies ergibt umgeformt:
Nun gilt
und wir erhalten
.
Dies kann man benutzen, um zu bestimmen. Daraus wiederum können p
und q folgendermaßen berechnet werden:
Aus den binomischen Formeln ergibt sich:
also:
Nun gibt mehrere Alternativen, zu ermitteln:
Wir berechnen
und wandern per Division durch 2 abwärts, bis wir 1 erhalten. Dies ist über
Shiften der Werte mit geringem Aufwand möglich. Die Anzahl der Shift-Operationen
zählen wir und erhalten dadurch den Wert
.
Wir wählen ein und eine Größe step. Wir berechnen für
eine Tabelle mit
. Anschließend
können wir in sukzessive
berechnen, bis der Wert in der
Tabelle gefunden wird.
Zunächst einmal ist eine gerade Zahl, was es ermöglicht, die Schrittweiten
zu verdoppeln.
Eine weitere Verbesserung läßt sich erzielen, wenn man berücksichtigt, daß man
rund die Hälfte der Primzahlen als Teiler von ausschließen kann.
Denn
. Eine anschließende
Multiplikation mit
ergibt
, so daß
ein quadratischer Rest modulo
sein muß.
Die Methode funktioniert nur in Spezialfällen: Die zu faktorisierende Zahl muß aus genau zwei Primzahlen bestehen. Akzeptable Laufzeiten ergeben sich nur, wenn beide Primzahlen gleichstellig sind und überdies in einer möglichst langen Kette ihrer führenden Stellen übereinstimmen.
Wenngleich es unwahrscheinlich erscheint, auf diese Weise einen Teiler zu finden, so ist doch für diesen Spezialfall die Verwandtschaft zur Faktorisierungsmethode nach Fermat ein interessanter Aspekt.
This document was generated using the LaTeX2HTML translator Version 2002-2-1 (1.70)
Copyright © 1993, 1994, 1995, 1996,
Nikos Drakos,
Computer Based Learning Unit, University of Leeds.
Copyright © 1997, 1998, 1999,
Ross Moore,
Mathematics Department, Macquarie University, Sydney.
The command line arguments were:
latex2html -transparent -white -antialias -html_version 4.0 -split 0 -nonavigation p-1.tex
The translation was initiated by Thorsten Reinecke on 2003-03-06