Privacy Policy Cookie Policy Terms and Conditions Faktorisierungsmethode von Fermat - Wikipedia

Faktorisierungsmethode von Fermat

aus Wikipedia, der freien Enzyklopädie

Die Faktorisierungsmethode von Fermat ist ein Algorithmus aus dem mathematischen Teilgebiet Zahlentheorie. Er berechnet zu einer ungeraden, zusammengesetzen Zahl n zwei Teiler a und b für die a \cdot b = n gilt.

Die Faktorisierungsmethode von Fermat hat nur dann eine gute Laufzeit, wenn sich die zu zerlegende Zahl als Produkt annähernd gleich großer Faktoren darstellen lässt. Sie bildet zudem die Grundlage allgemeiner Faktorisierungsverfahren für große Zahlen, die in der Regel eine bessere Laufzeit aufweisen.

Pierre de Fermat beschrieb diese heute nach ihm benannte Faktorisierungsmethode 1643 in einem Brief, der vermutlich an Mersenne oder Frenicle adressiert war. In diesem Brief demonstrierte er das Verfahren indem er die Primfaktorzerlegung von 2027651281 berechnete.[1] Einige Historiker vermuten, dass die Methode aber schon früher bekannt war.

Inhaltsverzeichnis

[Bearbeiten] Algorithmus

Die Faktorisierungsmethode von Fermat berechnet nacheinander die Werte

\left( \lceil \sqrt n \rceil \right)^2 - n
\left( \lceil \sqrt n \rceil + 1 \right)^2 - n
\left( \lceil \sqrt n \rceil + 2 \right)^2 - n
\vdots

bis einer dieser Werte eine Quadratzahl ist. \lceil \sqrt n \rceil bezeichnet dabei die kleinste ganze Zahl größer oder gleich \sqrt n. Die Wurzel der so gefundenen Quadratzahl wird mit y bezeichnet und die Zahl in der Klammer mit x. Daraus werden dann die zwei Teiler a und b von n berechnet:

y = \sqrt{x^2 - n}
a = x + y
b = xy


Das folgende Nassi-Shneiderman-Diagramm zeigt den Ablauf des Algorithmus, wie er schon von Fermat angewandt wurde. Dabei wird das wiederholte Quadrieren der obigen Beschreibung vermieden. Die einzelnen Werte werden dazu mittels der ersten binomischen Formel aus ihrem jeweiligen Vorgänger berechnet:

\left( s + 1 \right)^2 - n = s^2 + 2s + 1 - n
Berechne x = \lceil \sqrt n \rceil
Berechne r = x2n
solange r keine Quadratzahl
r \leftarrow r + 2x + 1
x \leftarrow x + 1
Berechne y = \sqrt{r}
Berechne a = x + y
Berechne b = xy

[Bearbeiten] Anmerkung

Indem man die letzten beiden Ziffern von r überprüft, kann man in vielen Fällen ausschließen, dass r eine Quadratzahl ist. Bei einer Quadratzahl gibt es es nur 22 Möglichkeiten: 00, x1, x4, 25, y6 und x9, wobei x für eine gerade und y für eine ungerade Ziffer steht. Man kann also bei vielen Zahlen durch Überprüfung der letzten beiden Ziffern ausschließen, dass es Quadratzahlen sind. Auch Fermat nutzte diese Eigenschaft der Quadratzahlen.

[Bearbeiten] Beispiele

[Bearbeiten] Beispiel mit vielen Iterationen

Man möchte Faktoren der Zahl 1729 bestimmen. Die Wurzel aus 1729 beträgt etwa 41,6. Die erste Zahl x, für die man r berechnet ist also die 42.

x r = x2n 2x + 1
42 35 85
43 120 87
44 207 89
45 296 91
46 387 93
47 480 95
48 575 97
49 672 99
50 771 101
51 872 103
52 975 105
53 1080 107
54 1187 109
55 1296 = 362

Man kann nun sofort die beiden Faktoren von n berechnen:

y = \sqrt{r} = 36
a = x + y = 55 + 36 = 91
b = xy = 55 − 36 = 19

Eine Zerlegung von 1729 lautet damit

1729 = 19 \cdot 91

[Bearbeiten] Beispiel mit wenigen Iterationen

Am Beispiel der Zahl 290377 sieht man, dass es Zahlen gibt, bei der die Faktorisierungsmethode von Fermat sehr schnell eine Zerlegung berechnet. Die Wurzel aus 290377 beträgt etwa 538,9. Die nächste ganze Zahl x ist somit 539. Es zeigt sich, dass r schon im ersten Schritt ein Quadratzahl ist:

r = x2n = 5392 − 290377 = 144 = 122

Man kann nun sofort die beiden Faktoren von n berechnen:

y = \sqrt{r} = \sqrt{144} = 12
a = x + y = 539 + 12 = 551
b = xy = 539 − 12 = 527

Eine Zerlegung von 290377 lautet damit

290377 = 551 \cdot 527

Weder 551 = 19 \cdot 29 noch 527= 17 \cdot 31 sind Primzahlen. Aber man kann den Algorithmus erneut auf 551 und 527 anwenden, um die vollständige Primfaktorzerlegung zu erhalten.

[Bearbeiten] Funktionsweise

Die Faktorisierungsmethode von Fermat sucht nun nach zwei Quadratzahlen x2 und y2, die die Gleichung x2n = y2 erfüllen. Auf Grund der 3. Binomischen Formel ist dann

n = x2y2 = (x + y)(xy)

und a = x + y und b = xy sind die gesuchten Teiler von n. Das Fermatsche Verfahren findet dabei genau diejenige Teiler a und b, die am nächsten zur Wurzel von n liegen.

Es stellt sich die Frage, ob immer zwei Quadratzahlen x2 und y2 existieren, die obige Gleichung erfüllen. Wäre dies nicht der Fall, würde der Algorithmus in eine Endlosschleife geraten. Im Folgenden sei n eine ungerade, zusammengesetzte Zahl, wie bei der Faktorisierungsmethode von Fermat vorausgesetzt. Dann ist n das Produkt zweier ungerader Zahlen a und b und damit sind auch

x = \frac{a+b}{2} und y = \frac{a-b}{2}

ganze Zahlen. Durch eine einfache Rechnung unter Anwendung der Binomischen Formeln zeigt sich, dass x2y2 = n ist:

x^2 - y^2 = \left( \frac{a+b}{2} \right)^2 - \left( \frac{a-b}{2} \right)^2 = \frac{a^2 + 2ab + b^2}{4} - \frac{a^2 - 2ab + b^2}{4} = ab = n

Die Zahl n lässt sich somit immer als Differenz zweier Quadratzahlen darstellen.

[Bearbeiten] Laufzeitanalyse

Das Verfahren gelangt in wenigen Iterationen zu einer Lösung, wenn sich eine Zahl in zwei annähernd gleich große Faktoren zerlegen lässt. Wir können den größeren Faktor in der Form a = \left(1 + \epsilon \right) \sqrt{n} mit einem ε > 0 schreiben. Ist der Wert ε sehr viel kleiner als 1, ergibt sich für die Zahl der notwendigen Iterationen annähernd \frac{{\epsilon}^{2}}{2} \sqrt{n}. In diesem Fall ist das Verfahren sehr viel schneller als die Probedivision.

Falls die Faktoren jedoch weit auseinanderliegen braucht auch dieses Verfahren sehr viele Iterationen. Im schlechtesten Fall bei n = 3p, wobei p eine Primzahl ist, benötigt dieses Verfahren Ω(n) viele Iterationen.

[Bearbeiten] Erweiterung: Faktorisierung eines Vielfachen

Um die schlechte Laufzeit für Zahlen zu umgehen, die nicht das Produkt zweier annähernd gleich großer Faktoren sind, kann man die Faktorisierungsmethode für ein Vielfaches n' = k \cdot n der ursprünglichen Zahl n durchführen. Die größten gemeinsamen Teiler zwischen n und je einem der berechneten Faktoren a' und b' von n' liefern anschließend jeweils einen Teiler von n.

Als Beispiel betrachten wir die Zahl 1729, bei der die normale Faktorisierungsmethode 14 Schritte benötigt. Die Zahl 120 \cdot 1729 = 207480 kann bereits nach zwei Iterationen in die Faktoren 420 und 494 zerlegt werden. Ein Teiler von 1729 kann als größter gemeinsamer Teiler berechnet werden:

\operatorname{ggT}(1729,420) = 7

Mit \frac{1729}{7} = 247 hat man eine Faktorisierungen der Zahl 1729:

1729 = 7 \cdot 247

Es stellt sich nun das Problem einen geeigneten Faktor k zu finden. Russell Sherman Lehman hat 1974 mit der Faktorisierungsmethode von Lehman ein Verfahren entwickelt, das solche k findet. Dadurch verkürzt sich die Laufzeit auf O(n^\frac{1}{3} \log \log n).

[Bearbeiten] Faktorisierungsmethode von Fermat als Primzahltest

Die Faktorisierungsmethode von Fermat kann als Primzahltest verwendet werden[2], auch wenn dies nicht besonders effektiv ist. Aus der Laufzeitanalyse ist bekannt, dass die ungünstigste Eingabe für den Algorithmus eine Zahl der Form n = 3p ist (p ist dabei eine Primzahl). In diesem Fall ist

x = \frac{3+p}{2} = \frac{9+n}{6}

Lässt man nun als Eingabe n des Algorithmus beliebige ungerade Zahlen zu und ist keine der Zahlen

\left( \lceil \sqrt n \rceil \right)^2 - n, \left( \lceil \sqrt n \rceil + 1 \right)^2 - n, \ldots, \left( \frac{9+n}{6} \right)^2 - n

eine Quadratzahl, so ist n eine Primzahl.

[Bearbeiten] Weblinks

[Bearbeiten] Quellen

  1. Leonard Eugene Dickson: History of the Theory of Numbers. Volume 1. Divisibility and Primality. Dover Publications, 2005, ISBN 0-4864-4232-2, S. 357
  2. Richard Crandall, Carl Pomerance: Prime Numbers. A Computational Perspecitve. 2. Auflage. Springer-Verlag, New York, 2005, ISBN 0-387-25282-7, S. 191–192
Andere Sprachen
THIS WEB:

aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - be - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - closed_zh_tw - co - cr - cs - csb - cu - cv - cy - da - de - diq - dv - dz - ee - el - eml - en - eo - es - et - eu - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gd - gl - glk - gn - got - gu - gv - ha - haw - he - hi - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mg - mh - mi - mk - ml - mn - mo - mr - ms - mt - mus - my - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - rm - rmy - rn - ro - roa_rup - roa_tara - ru - ru_sib - rw - sa - sc - scn - sco - sd - se - searchcom - sg - sh - si - simple - sk - sl - sm - sn - so - sq - sr - ss - st - su - sv - sw - ta - te - test - tet - tg - th - ti - tk - tl - tlh - tn - to - tokipona - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu

Static Wikipedia 2008 (no images)

aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - bcl - be - be_x_old - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - co - cr - crh - cs - csb - cu - cv - cy - da - de - diq - dsb - dv - dz - ee - el - eml - en - eo - es - et - eu - ext - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gan - gd - gl - glk - gn - got - gu - gv - ha - hak - haw - he - hi - hif - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kaa - kab - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mdf - mg - mh - mi - mk - ml - mn - mo - mr - mt - mus - my - myv - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - quality - rm - rmy - rn - ro - roa_rup - roa_tara - ru - rw - sa - sah - sc - scn - sco - sd - se - sg - sh - si - simple - sk - sl - sm - sn - so - sr - srn - ss - st - stq - su - sv - sw - szl - ta - te - tet - tg - th - ti - tk - tl - tlh - tn - to - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu -

Static Wikipedia 2007:

aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - be - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - closed_zh_tw - co - cr - cs - csb - cu - cv - cy - da - de - diq - dv - dz - ee - el - eml - en - eo - es - et - eu - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gd - gl - glk - gn - got - gu - gv - ha - haw - he - hi - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mg - mh - mi - mk - ml - mn - mo - mr - ms - mt - mus - my - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - rm - rmy - rn - ro - roa_rup - roa_tara - ru - ru_sib - rw - sa - sc - scn - sco - sd - se - searchcom - sg - sh - si - simple - sk - sl - sm - sn - so - sq - sr - ss - st - su - sv - sw - ta - te - test - tet - tg - th - ti - tk - tl - tlh - tn - to - tokipona - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu

Static Wikipedia 2006:

aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - be - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - closed_zh_tw - co - cr - cs - csb - cu - cv - cy - da - de - diq - dv - dz - ee - el - eml - en - eo - es - et - eu - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gd - gl - glk - gn - got - gu - gv - ha - haw - he - hi - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mg - mh - mi - mk - ml - mn - mo - mr - ms - mt - mus - my - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - rm - rmy - rn - ro - roa_rup - roa_tara - ru - ru_sib - rw - sa - sc - scn - sco - sd - se - searchcom - sg - sh - si - simple - sk - sl - sm - sn - so - sq - sr - ss - st - su - sv - sw - ta - te - test - tet - tg - th - ti - tk - tl - tlh - tn - to - tokipona - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu