Shor-Algorithmus
Nun werden wir uns dem Problem der ganzzahligen Faktorisierung zuwenden und sehen, wie es auf einem Quantencomputer mithilfe von Phasenschätzung effizient gelöst werden kann. Der Algorithmus, den wir erhalten werden, ist der Shor'sche Algorithmus zur ganzzahligen Faktorisierung. Shor hat seinen Algorithmus nicht speziell im Hinblick auf die Phasenabschätzung beschrieben, aber es ist ein natürlicher und intuitiver Weg, um zu erklären, wie er funktioniert.
Wir werden zunächst ein Zwischenproblem erörtern, das so genannte Ordnungsfindungsproblem, und sehen, wie die Phasenschätzung eine Lösung für dieses Problem bietet. Wir werden dann sehen, wie eine effiziente Lösung des Ordnungsfindungsproblems eine effiziente Lösung des ganzzahligen Faktorisierungsproblems ergibt. (Wenn die Lösung eines Problems eine Lösung für ein anderes Problem dieser Art liefert, sagt man, dass das zweite Problem auf das erste reduziert wird - in diesem Fall reduzieren wir also die ganzzahlige Faktorisierung auf die Ordnungsfindung) Dieser zweite Teil von Shors Algorithmus macht überhaupt keinen Gebrauch von Quantencomputern; er ist völlig klassisch. Das Quantencomputing wird nur zur Lösung der Auftragsfindung benötigt.
Das Problem der Auftragsfindung
Einige Grundlagen der Zahlentheorie
Um das Problem der Ordnungsfindung zu erklären und zu zeigen, wie es mit Hilfe der Phasenschätzung gelöst werden kann, ist es hilfreich, mit einigen grundlegenden Konzepten der Zahlentheorie zu beginnen und nebenbei einige praktische Notationen einzuführen.
Zunächst definieren wir für jede beliebige positive ganze Zahl die Menge wie folgt.
Zum Beispiel, und so weiter.
Das sind zwar Zahlenmengen, aber wir können sie als mehr als nur Mengen betrachten. Insbesondere können wir uns arithmetische Operationen auf vorstellen, wie beispielsweise Addition und Multiplikation – und wenn wir uns darauf einigen, unsere Ergebnisse immer modulo zu betrachten (das heißt, durch zu dividieren und den Rest als Ergebnis zu nehmen), bleiben wir bei der Durchführung dieser Operationen stets innerhalb dieser Menge. Die beiden spezifischen Rechenoperationen Addition und Multiplikation, jeweils modulo , machen zu einem Ring, der in der Algebra eine grundlegend wichtige Objektart darstellt.
Beispielsweise sind und Teilelemente von , und wenn wir sie miteinander multiplizieren, erhalten wir , was bei der Division durch den Rest ergibt. Manchmal drücken wir dies wie folgt aus.
Wir können aber auch einfach „ “ schreiben, vorausgesetzt, es ist klar, dass wir mit „ “ arbeiten – einfach, um unsere Notation so einfach wie möglich zu halten.
Als Beispiel sind hier die Additions- und Multiplikationstabellen für aufgeführt.
Unter den Elementen der Menge sind die Elemente , die die Bedingung erfüllen, besonders. Häufig wird die Menge, die diese Elemente enthält, wie folgt mit einem Stern gekennzeichnet.
Wenn wir unsere Aufmerksamkeit auf die Multiplikationsoperation richten, bildet die Menge eine Gruppe – genauer gesagt eine abelsche Gruppe –, die eine weitere wichtige Objektart in der Algebra darstellt. Es ist eine grundlegende Eigenschaft dieser Mengen (und endlicher Gruppen im Allgemeinen), dass wir, wenn wir ein beliebiges Element wählen und wiederholt mit sich selbst multiplizieren, letztendlich immer die Zahl erhalten.
Nehmen wir als erstes Beispiel „ “. Wir haben, dass „ “, da „ “ gilt, und wenn wir „ “ mit sich selbst multiplizieren, erhalten wir „ “, wie die obige Tabelle bestätigt.
Als zweites Beispiel nehmen wir . Wenn wir die Zahlen von bis durchgehen, sind diejenigen, deren GCD gleich mit ist, wie folgt.
Für jedes dieser Elemente ist es möglich, diese Zahl mit einer positiven ganzzahligen Potenz zu potenzieren, um „ “ zu erhalten. Hier sind die kleinsten Potenzen, bei denen dies funktioniert:
Natürlich arbeiten wir mit für alle diese Gleichungen, die wir nicht schreiben müssen - wir nehmen sie als implizit an, um die Dinge nicht zu überladen. Das werden wir auch im weiteren Verlauf der Lektion tun.
Problemstellung und Zusammenhang mit der Phasenschätzung
Nun können wir das Problem der Auftragsfindung formulieren.
Eingabe: positive ganze Zahlen und , die erfüllen \ Ausgabe: die kleinste positive ganze Zahl , die
Alternativ, in der oben eingeführten Notation, sei gegeben: „ “, und wir suchen die kleinste positive ganze Zahl „ “, sodass „ “ gilt. Diese Zahl „ “ wird als Ordnung von „ “ modulo „ “ bezeichnet.
Um das Problem der Ordnungsfindung mit der Phasenschätzung zu verknüpfen, betrachten wir die auf einem System definierte Operation, deren klassische Zustände den entsprechen, wobei wir mit einem festen Element multiplizieren.
Um es klar zu sagen: Wir führen die Multiplikation in „ “ durch, daher ist implizit, dass wir das Produkt modulo „ “ innerhalb des Kets auf der rechten Seite der Gleichung berechnen.
Nehmen wir beispielsweise und ; dann ist die Wirkung von auf die Standardbasis wie folgt.
Dies ist eine unitäre Operation, vorausgesetzt, dass gilt; sie mischt die Elemente der Standardbasis , sodass es sich bei der Matrix um eine Permutationsmatrix handelt. Aus der Definition geht hervor, dass diese Operation deterministisch ist. Eine einfache Möglichkeit, zu erkennen, dass sie invertierbar ist, besteht darin, die Ordnung von modulo zu betrachten und zu erkennen, dass die Inverse von gleich ist.
Es gibt noch eine andere Möglichkeit, sich die Umkehrfunktion vorzustellen, für die man keinerlei Kenntnisse über „ “ benötigt (was schließlich das ist, was wir berechnen wollen). Für jedes Element gibt es immer ein eindeutiges Element , das die Bedingung erfüllt. Wir bezeichnen dieses Element mit , und es lässt sich effizient berechnen; eine Erweiterung des GCD-Algorithmus von Euklid erledigt dies mit einem Aufwand, der quadratisch in ist. Und somit
Die Operation ist also sowohl deterministisch als auch invertierbar. Das bedeutet, dass sie durch eine Permutationsmatrix beschrieben wird und daher unitär ist.
Betrachten wir nun die Eigenvektoren und Eigenwerte der Operation unter der Annahme, dass gilt. Wie gerade dargelegt, besagt diese Annahme, dass unitär ist.
Es gibt Eigenwerte von , wobei derselbe Eigenwert möglicherweise mehrfach vorkommt, und im Allgemeinen besteht eine gewisse Freiheit bei der Auswahl der entsprechenden Eigenvektoren – aber wir müssen uns nicht um alle Möglichkeiten kümmern. Fangen wir ganz einfach an und bestimmen wir nur einen Eigenvektor von .
Die Zahl ist die Ordnung von modulo – hier und im gesamten weiteren Verlauf dieser Lektion. Der zu diesem Eigenvektor gehörende Eigenwert ist , da er sich bei Multiplikation mit nicht ändert.
Dies geschieht, weil gilt, sodass jeder Standardbasiszustand bei zu verschoben wird und wieder zu zurückverschoben wird. Vereinfacht ausgedrückt ist es so, als würden wir langsam umrühren, aber da es bereits vollständig durchgerührt ist, ändert sich nichts.
Hier ist ein weiteres Beispiel für einen Eigenvektor von . Dieses Beispiel ist im Zusammenhang mit der Ordnungsbestimmung und der Phasenschätzung besonders interessant.
Alternativ kann man diesen Vektor auch durch Summation wie folgt schreiben.
Hier taucht die komplexe Zahl auf natürliche Weise auf, was darauf zurückzuführen ist, wie die Multiplikation mit modulo funktioniert. Diesmal lautet der entsprechende Eigenwert . Um dies zu verdeutlichen, können wir zunächst folgende Berechnung durchführen.
Da nun gilt: „ “ und „ “, ergibt sich, dass
Also .
Mit derselben Argumentation können wir weitere Eigenvektor-Eigenwert-Paare für bestimmen. Für jede Wahl von gilt:
ist ein Eigenvektor von , dessen zugehöriger Eigenwert ist.
Es gibt noch weitere Eigenvektoren von , aber wir brauchen uns damit nicht zu befassen – wir konzentrieren uns ausschließlich auf die Eigenvektoren , die wir gerade ermittelt haben.
Ordnungsfindung durch Phasenschätzung
Um das Problem der Reihenfolgesuche für eine gegebene Wahl von zu lösen, können wir das Verfahren zur Phasenschätzung auf die Operation anwenden.
Dazu müssen wir nicht nur effizient mit einem Quantenschaltkreis umsetzen, sondern auch , , und so weiter – und zwar so weit wie nötig, um aus dem Phasenschätzungsverfahren eine ausreichend genaue Schätzung zu erhalten. Hier werden wir erläutern, wie das gemacht werden kann, und später werden wir genau herausfinden, wie viel Genauigkeit erforderlich ist.
Beginnen wir zunächst mit der Operation „ “ an sich. Da wir mit dem Quantenschaltkreismodell arbeiten, verwenden wir natürlich die Binärschreibweise, um die Zahlen zwischen und zu kodieren. Die größte Zahl, die wir kodieren müssen, ist , daher beträgt die Anzahl der benötigten Bits
Wenn beispielsweise gilt, erhalten wir . So sieht die Kodierung der Elemente von als binäre Zeichenketten der Länge aus.
Und hier ist eine genaue Definition, wie als -qubit Operation definiert ist.
Der Punkt ist: Obwohl uns nur interessiert, wie für funktioniert, müssen wir dennoch festlegen, wie es für die übrigen Standardbasiszustände funktioniert – und zwar so, dass wir weiterhin eine unitäre Operation erhalten. Dies wird erreicht, indem man „ “ so definiert, dass es die verbleibenden Standardbasiszustände nicht beeinflusst.
Unter Verwendung der in der vorherigen Lektion behandelten Algorithmen für die ganzzahlige Multiplikation und Division sowie der Methodik für reversible, „garbage-freie“ Implementierungen dieser Algorithmen können wir eine Quantenschaltung aufbauen, die die Operation „ “ für eine beliebige Wahl von mit einem Aufwand von ausführt. Hier ist eine Möglichkeit, wie dies umgesetzt werden kann.
- Baue eine Schaltung zur Durchführung der Operation
wo
unter Anwendung der in der vorherigen Lektion beschriebenen Methode. Damit erhalten wir einen Kreis der Größe .
-
Tauschen Sie die beiden -Qubit-Systeme mit Swap-Gates, um die Qubits einzeln zu tauschen.
-
Bauen Sie analog zum ersten Schritt eine Schaltung für die Operation
wobei die Inverse von in ist.
Indem wir die unteren Qubits initialisieren und die drei Schritte zusammensetzen, erhalten wir diese Transformation:
Das Verfahren erfordert Arbeitsraum-Qubits, die jedoch am Ende wieder in ihren initialisierten Zustand zurückversetzt werden, sodass wir diese Schaltungen zur Phasenschätzung nutzen können. Die Gesamtkosten der Schaltung betragen .
Um , , usw. auszuführen, können wir genau dieselbe Methode anwenden, mit dem Unterschied, dass wir durch , , usw. als Elemente von ersetzen. Das heißt, für jede von uns gewählte Potenz können wir eine Schaltung für erstellen, indem wir nicht Mal die Schaltung für durchlaufen, sondern stattdessen berechnen und dann die Schaltung für verwenden.
Die Berechnung von Potenzen ist das in der vorherigen Lektion erwähnte Problem der modularen Exponentiation. Diese Berechnung lässt sich auf klassische Weise durchführen, und zwar mithilfe des in der vorherigen Lektion erwähnten Algorithmus für die modulare Potenzierung (der in der computergestützten Zahlentheorie oft als „Potenzalgorithmus“ bezeichnet wird). Tatsächlich benötigen wir lediglich die power-of-2 en Potenzen von , insbesondere , und diese Potenzen können wir erhalten, indem wir -mal iterativ quadrieren. Jede Quadrierung kann durch eine Boolesche Schaltung der Größe durchgeführt werden.
Im Grunde genommen verlagern wir hier das Problem, die Iteration „ “ so oft wie „ “ durchzuführen, auf eine effiziente klassische Berechnung. Und es ist ein Glück, dass das möglich ist! Bei einer beliebigen Wahl eines Quantenschaltkreises im Rahmen des Phasenschätzungsproblems dürfte dies nicht möglich sein – und in diesem Fall steigen die Kosten für die Phasenschätzung exponentiell mit der Anzahl der Steuerqubits .
Lösung für einen geeigneten Eigenvektor
Um zu verstehen, wie wir das Problem der Reihenfolgebestimmung mithilfe der Phasenschätzung lösen können, gehen wir zunächst davon aus, dass wir das Phasenschätzungsverfahren auf die Operation unter Verwendung des Eigenvektors anwenden. Wie sich herausstellt, ist es gar nicht so einfach, diesen Eigenvektor zu ermitteln, daher ist die Geschichte damit noch nicht zu Ende – aber es ist hilfreich, hier anzufangen.
Der Eigenwert von , der dem Eigenvektor entspricht, ist
Das heißt, für . Wenn wir also die Phasenschätzung auf unter Verwendung des Eigenvektors durchführen, erhalten wir eine Näherung für . Durch Berechnung des Kehrwerts können wir ermitteln – vorausgesetzt, unsere Näherung ist gut genug.
Genauer gesagt: Wenn wir das Verfahren zur Phasenschätzung unter Verwendung der Steuerungqubits „ “ ausführen, erhalten wir einen Wert . Anschließend nehmen wir als Schätzwert für , was im vorliegenden Fall ist. Um anhand dieser Näherung den Wert von zu ermitteln, ist es naheliegend, den Kehrwert unserer Näherung zu berechnen und auf die nächste ganze Zahl zu runden.
Nehmen wir beispielsweise an, dass gilt, und wir führen eine Phasenschätzung auf mit dem Eigenvektor unter Verwendung von Steuerbits durch. Die beste „ “-Bit-Näherung für lautet , und wir haben eine recht gute Chance (in diesem Fall etwa ), bei der Phasenschätzung das Ergebnis zu erhalten. Wir haben
und nach Rundung auf die nächste ganze Zahl ergibt sich „ “, was die richtige Antwort ist.
Andererseits erhalten wir möglicherweise nicht das richtige Ergebnis, wenn wir nicht genau genug vorgehen. Nehmen wir beispielsweise -Steuerqubits bei der Phasenschätzung, so erhalten wir möglicherweise die beste -Bit-Näherung an , nämlich . Der Kehrwert ergibt
Und die Rundung auf die nächste ganze Zahl führt zu einem falschen Ergebnis von .
Wie viel Genauigkeit brauchen wir also, um das richtige Ergebnis zu erhalten? Wir wissen, dass die Ordnung eine ganze Zahl ist, und intuitiv benötigen wir genügend Genauigkeit, um von nahegelegenen Möglichkeiten zu unterscheiden, darunter und . Die Zahl, die am nächsten liegt und die für uns von Bedeutung ist, ist , und der Abstand zwischen diesen beiden Zahlen beträgt
Wenn wir also sicherstellen wollen, dass wir nicht mit verwechseln, reicht es aus, eine ausreichende Genauigkeit zu wählen, um zu gewährleisten, dass eine bestmögliche Annäherung an näher an liegt als an . Wenn wir eine ausreichende Genauigkeit wählen, sodass
Damit der Fehler kleiner als die Hälfte des Abstands zwischen und ist, liegt näher an als an jeder anderen Möglichkeit, einschließlich und .
Wir können dies wie folgt überprüfen. Angenommen, dass
für zufriedenstellend
Wenn wir den Kehrwert nehmen, erhalten wir
Indem wir im Zähler maximieren und im Nenner minimieren, können wir wie folgt eingrenzen, wie weit wir von entfernt sind.
Wir sind weniger als von entfernt, daher erhalten wir, wie erwartet, , wenn wir aufrunden.
Da wir noch nicht wissen, was ist, können wir leider nicht sagen, wie viel Genauigkeit wir brauchen. Stattdessen können wir die Tatsache nutzen, dass kleiner als sein muss, um sicherzustellen, dass wir eine ausreichende Genauigkeit verwenden. Insbesondere, wenn wir eine ausreichende Genauigkeit verwenden, um sicherzustellen, dass die beste Annäherung an folgende Bedingungen erfüllt
dann haben wir genug Genauigkeit, um korrekt zu bestimmen, wenn wir den Kehrwert nehmen. Mit ist sichergestellt, dass wir mit der oben beschriebenen Methode mit hoher Wahrscheinlichkeit eine Schätzung mit dieser Genauigkeit erhalten. ( reicht aus, wenn wir uns mit einer Untergrenze von 40 % für die Erfolgswahrscheinlichkeit zufrieden geben)
Allgemeine Lösung
Wie wir gerade gesehen haben, können wir, wenn wir den Eigenvektor von haben, durch Phasenschätzung ermitteln, sofern wir genügend Steuerqubits verwenden, um dies mit ausreichender Genauigkeit durchzuführen. Leider ist es nicht einfach, an die Eigenvektor heranzukommen, daher müssen wir uns überlegen, wie wir vorgehen sollen.
Nehmen wir einmal an, wir gehen genauso vor wie oben, nur dass wir anstelle von den Eigenvektor verwenden, und zwar für jede beliebige Wahl von , die wir betrachten wollen. Das Ergebnis, das wir aus dem Phasenschätzungsverfahren erhalten, ist eine Näherung
Unter der Annahme, dass wir weder noch kennen, ermöglicht uns dies möglicherweise, zu identifizieren – oder auch nicht. Wenn beispielsweise gilt, erhalten wir eine Annäherung an , was uns leider keine Informationen liefert. Dies ist jedoch ein Sonderfall; für andere Werte von können wir zumindest etwas über erfahren.
Wir können einen Algorithmus verwenden, der als Algorithmus für fortgesetzte Brüche bekannt ist, um unsere Annäherung in naheliegende Brüche zu verwandeln - einschließlich , wenn die Annäherung gut genug ist. Wir werden den Algorithmus für fortgesetzte Brüche hier nicht erklären. Stattdessen wird hier eine bekannte Tatsache über diesen Algorithmus dargelegt.
Für eine ganze Zahl und eine reelle Zahl gibt es höchstens eine Möglichkeit, ganze Zahlen so zu wählen, dass und die Bedingung erfüllen. Für und ermittelt der Kettenbruch-Algorithmus und oder meldet, dass diese nicht existieren. Dieser Algorithmus lässt sich als Boolesche Schaltung mit der Größe implementieren.
Wenn wir eine sehr genaue Näherung für haben und den Kettenbruch-Algorithmus für und anwenden, erhalten wir und , wie in der Aufgabe beschrieben. Eine Analyse dieser Tatsache lässt den Schluss zu, dass
Beachten Sie insbesondere, dass wir nicht unbedingt und lernen, sondern nur in einfachster Form.
Zum Beispiel – und wie wir bereits festgestellt haben – werden wir aus „ “ nichts lernen. Aber das ist der einzige Wert von „ “, bei dem dies der Fall ist. Wenn ungleich Null ist, kann es gemeinsame Teiler mit geben, aber die Zahl , die wir aus dem Kettenbruchalgorithmus erhalten, muss mindestens teilen.
Es ist zwar keineswegs offensichtlich, aber es stimmt: Wenn wir die Möglichkeit haben, und für für zu ermitteln, die einheitlich zufällig ausgewählt wurden, dann ist es sehr wahrscheinlich, dass wir bereits nach wenigen Stichproben rekonstruieren können. Insbesondere wenn unsere Vermutung für das kleinste gemeinsame Vielfache aller beobachteten Werte für den Nenner ist, werden wir mit hoher Wahrscheinlichkeit richtig liegen. Intuitiv betrachtet sind manche Werte von nicht gut, da sie gemeinsame Faktoren mit haben, und diese gemeinsamen Faktoren bleiben uns verborgen, wenn wir und ermitteln. Zufällige Auswahlen von können jedoch Faktoren von wahrscheinlich nicht lange verbergen, und die Wahrscheinlichkeit, dass wir nicht richtig erraten, indem wir das kleinste gemeinsame Vielfache der beobachteten Nenner bilden, sinkt exponentiell mit der Anzahl der Stichproben.
Bleibt noch die Frage zu klären, wie wir an einen Eigenvektor von kommen, mit dem wir das Phasenschätzungsverfahren durchführen können. Wie sich herausstellte, müssen wir sie gar nicht erst erstellen!
Stattdessen werden wir das Phasenschätzungsverfahren auf den Zustands anwenden; damit meinen wir die -Bit-Binärkodierung der Zahl anstelle eines Eigenvektors von . Bisher haben wir nur davon gesprochen, das Phasenschätzungsverfahren auf einen bestimmten Eigenvektor anzuwenden, aber nichts hindert uns daran, das Verfahren auf einen Eingangszustand anzuwenden, der kein Eigenvektor von ist, und genau das tun wir hier mit dem Zustand . (Dies ist kein Eigenvektor von , es sei denn, , was für uns jedoch nicht von Interesse ist.)
Der Grund für die Wahl des Zustands anstelle eines Eigenvektors von ist, dass die folgende Gleichung wahr ist.
Eine Möglichkeit, diese Gleichung zu überprüfen, besteht darin, die inneren Produkte der beiden Seiten mit jedem Standard-Basiszustand zu vergleichen, wobei die zuvor in der Lektion erwähnten Formeln bei der Auswertung der Ergebnisse für die rechte Seite helfen. Infolgedessen erhalten wir genau die gleichen Messergebnisse, als hätten wir gleichmäßig nach dem Zufallsprinzip ausgewählt und als Eigenvektor verwenden.
Um das genauer zu verdeutlichen, stellen wir uns vor, wir führen das Verfahren zur Phasenschätzung mit dem Zustand anstelle eines der Eigenvektoren durch. Nach Durchführung der inversen Quanten-Fourier-Transformation erhalten wir folgenden Zustand:
wo
Der Vektor stellt den Zustand der oberen Qubits dar, nachdem die Umkehrung der Quanten-Fourier-Transformation an ihnen durchgeführt wurde.
Aufgrund der Tatsache, dass eine orthonormale Menge ist, finden wir, dass eine Messung der obersten Qubits eine Annäherung an den Wert ergibt, wobei gleichmäßig zufällig gewählt wird. Wie wir bereits besprochen haben, ermöglicht uns dies, mit einem hohen Maß an Vertrauen nach mehreren unabhängigen Durchläufen zu lernen, was unser Ziel war.
Gesamtkosten
Die Kosten für die Ausführung jedes kontrollierten unitären „ “ betragen . Es gibt kontrollierte unitäre Operationen, und wir haben , sodass die Gesamtkosten für die kontrollierten unitären Operationen betragen. Darüber hinaus haben wir Hadamard-Gates (die zu den Kosten beitragen), und die inverse Quanten-Fourier-Transformation trägt zu den Kosten bei. Somit dominieren die Kosten der kontrollierten Unitar-Operationen die Kosten des gesamten Verfahrens – das somit „ “ ist.
Neben dem Quantenschaltkreis selbst müssen im Verlauf des Prozesses noch einige klassische Berechnungen durchgeführt werden. Dazu gehört die Berechnung der Potenzen in für , die zur Erzeugung der kontrollierten unitären Gatter benötigt werden, sowie der Kettenbruch-Algorithmus, der Näherungswerte von in Brüche umwandelt. Diese Berechnungen können mit Booleschen Schaltungen durchgeführt werden, deren Gesamtkosten bei liegen.
Wie üblich können alle diese Grenzen mit asymptotisch schnellen Algorithmen verbessert werden; diese Grenzen setzen voraus, dass wir Standardalgorithmen für grundlegende arithmetische Operationen verwenden.
Factoring durch Auftragssuche
Der letzte Punkt, den wir erörtern müssen, ist die Frage, wie die Lösung des Ordnungsfindungsproblems uns hilft, zu faktorisieren. Dieser Teil ist völlig klassisch - er hat nichts speziell mit Quantencomputing zu tun.
Das ist der Grundgedanke. Wir wollen die Zahl „ “ in Faktoren zerlegen, und das können wir rekursiv tun. Konkret können wir uns auf die Aufgabe konzentrieren, zu zerlegen, d. h. zwei beliebige ganze Zahlen zu finden, für die gilt. Dies ist nicht möglich, wenn eine Primzahl ist, aber wir können zunächst mithilfe eines Primzahlprüfalgorithmus effizient prüfen, ob eine Primzahl ist, und wenn keine Primzahl ist, versuchen wir, sie zu zerlegen. Sobald wir zerlegt haben, können wir einfach rekursiv und durchlaufen, bis alle unsere Faktoren Primzahlen sind und wir die Primfaktorzerlegung von erhalten.
Das Aufteilen von geraden ganzen Zahlen ist einfach: Wir geben einfach „ “ und „ “ aus.
Es ist außerdem einfach, perfekte Potenzen zu zerlegen, d. h. Zahlen der Form für ganze Zahlen , indem man einfach die Wurzeln , , usw. näherungsweise berechnet und benachbarte ganze Zahlen als Kandidaten für überprüft. Wir müssen nicht weiter als Schritte in dieser Folge vorgehen, da die Wurzel an dieser Stelle unter fällt und keine weiteren Kandidaten mehr liefert.
Es ist gut, dass wir beides tun können, denn die Ordnungssuche hilft uns nicht beim Faktorisieren gerader Zahlen oder bei Primzahlpotenzen, bei denen die Zahl zufällig eine Primzahl ist. Ist jedoch ungerade und keine Primzahlpotenz, so können wir dank der Ordnungsfindung aufteilen.
-
Wähle zufällig „ “ aus.
-
Berechne .
-
Wenn „ “ gilt, dann gib „ “ und „ “ aus und beende das Programm. Andernfalls fahren Sie mit dem nächsten Schritt fort, in dem Wissen, dass „ “ gilt.
-
Sei die Ordnung von modulo . (An dieser Stelle brauchen wir die Auftragsermittlung.)
-
Wenn ausgeglichen ist:
5.1 Berechne modulo
5.2
Berechne . 5.3
Wenn , dann gib und aus und beende die Berechnung. -
Ist dieser Punkt erreicht, ist es dem Algorithmus nicht gelungen, einen Faktor von zu finden.
Bei der Ausführung dieses Algorithmus kann es vorkommen, dass ein Faktor von nicht gefunden wird. Konkret tritt dies in zwei Fällen auf:
- Die Reihenfolge von modulo ist ungerade.
- Die Ordnung von modulo ist gerade und .
Mit Hilfe der elementaren Zahlentheorie lässt sich beweisen, dass bei einer zufälligen Wahl von mit einer Wahrscheinlichkeit von mindestens keines dieser Ereignisse eintritt. Tatsächlich beträgt die Wahrscheinlichkeit, dass eines der beiden Ereignisse eintritt, höchstens , wobei die Anzahl der verschiedenen Primfaktoren von ist, weshalb die Annahme erforderlich ist, dass keine Primzahlpotenz ist. (Damit diese Tatsache gilt, muss außerdem die Annahme gelten, dass ungerade ist.)
Das bedeutet, dass bei jedem Durchlauf die Wahrscheinlichkeit, dass „ “ aufgeteilt wird, mindestens 50 % beträgt. Wenn wir den Algorithmus also -mal ausführen und dabei jedes Mal zufällig auswählen, gelingt es uns mit einer Wahrscheinlichkeit von mindestens , „ “ aufzuteilen.
Die Grundidee des Algorithmus ist die folgende. Wenn wir eine Auswahl von haben, für die die Reihenfolge von modulo gerade ist, dann ist eine ganze Zahl und wir können die zahlen
Unter Verwendung der Formel „ “ kommen wir zu dem Schluss, dass
Nun wissen wir, dass gemäß der Definition der Ordnung gilt – was nichts anderes bedeutet, als dass ein Teiler von ist. Das bedeutet, dass ein Teiler des Produkts ist
Damit das stimmt, müssen alle Primfaktoren von auch Primfaktoren von oder (oder von beiden) sein - und bei einer zufälligen Auswahl von stellt sich heraus, dass es unwahrscheinlich ist, dass alle Primfaktoren von einen der Terme teilen und keiner den anderen. Solange einige der Primfaktoren von den ersten Term teilen und einige den zweiten Term teilen, können wir einen nicht-trivialen Faktor von finden, indem wir den GCD mit dem ersten Term berechnen.