Rozkład na czynniki: Różnice pomiędzy wersjami
[wersja przejrzana] | [wersja przejrzana] |
Usunięta treść Dodana treść
m HotCat: Usunięto kategorię "Kryptologia" |
m WP:SK, drobne redakcyjne |
||
Linia 1:
{{disambigP|Rozkład na czynniki|[[czynniki pierwsze]]}}
'''Rozkład na czynniki''' lub '''faktoryzacja''' – proces, w którym dla danego obiektu
Faktoryzacja [[liczby całkowite
Faktoryzacja [[wielomian]]u to znalezienie takich wielomianów, że ich iloczyn jest równy danemu. W tym wypadku rozwiązanie nietrywialne nie może zawierać wielomianu o tym samym stopniu, co wielomian faktoryzowany. Zgodnie z [[
== Złożoność obliczeniowa ==
O ile mnożenie jest bardzo prostą czynnością, to nie są znane żadne szybkie (działające w czasie wielomianowym względem ilości cyfr rozkładanej liczby) metody faktoryzacji. Na [[Złożoność obliczeniowa|złożoności obliczeniowej]] faktoryzacji opiera się [[kryptografia asymetryczna|system kryptografii asymetrycznej]] [[RSA (kryptografia)|RSA]].
Przykład: mając dwie liczby 65537 i 65539, można szybko je pomnożyć uzyskując 4295229443. Jednak aby rozłożyć 4295229443 na czynniki trzeba próbować podzielić je przez wszystkie liczby pierwsze po kolei, aż natrafi się na właściwe czynniki. Dla bardzo dużych liczb
== Algorytmy faktoryzacji ==
Najprostszy algorytm polega na próbie dzielenia faktoryzowanej liczby <math>n</math> przez wszystkie liczby pierwsze od 2 do <math>\sqrt n</math>. Algorytm ten dobrze nadaje się do tego, żeby zacząć faktoryzować liczbę
Niektóre algorytmy opierają się na znajdowaniu takiej pary liczb <math>x</math>, <math>y</math> (<math>x \ne y \mod n</math> ; <math>x \ne -y \mod n</math>), że:
: <math>x^2 = y^2 \mod n</math>
: <math>x^2 - y^2 = 0 \mod n</math>
: <math>(x-y)(x+y) = 0 \mod n</math>
Czyli albo <math>x = y \mod n</math>, albo <math>x = -y \mod n</math>, albo <math>n</math> ma wspólne dzielniki z <math>x-y</math> oraz <math>x+y</math>, a zatem sfaktoryzowaliśmy <math>n</math>.
Linia 24:
Najprostszą metodą tego typu jest sprawdzanie dla losowych liczb <math>z</math>, czy <math>z^2 \mod n</math> jest kwadratem (zwykłym, nie modulo). Możemy szybko znaleźć faktoryzację niektórych liczb, ale ogólnie metoda ta nie jest wiele lepsza od prób dzielenia.
O wiele lepszym sposobem jest wybranie zestawu małych liczb pierwszych
: <math>z^2 = p_0^{\alpha_0} p_1^{\alpha_1} p_2^{\alpha_2} \cdots p_k^{\alpha_k}</math>
A właściwie ich parzystości. Jeśli wybierzemy zbyt duży zestaw liczb pierwszych zwiększymy niepotrzebnie ilość obliczeń, jeśli wybierzemy zbyt mały odrzucimy zbyt dużo liczb.
Po uzbieraniu wystarczająco wielu relacji tego typu wybieramy taki podzbiór <math>z</math>, że wszystkie potęgi po prawej stronie są parzyste (dlatego nie musimy zachowywać dokładnych wykładników, a jedynie ich parzystości). Nie musimy sprawdzać wszystkich możliwych zestawów
Otrzymujemy wtedy:
: <math>x^2 = y^2 \mod n</math>
Gdzie <math>x</math> to iloczyn odpowiednich <math>z</math>, a <math>y</math> to iloczyn odpowiednich <math>p_i</math> w potędze będącej połową sumy potęg dla <math>z</math> znajdujących się po lewej stronie. Z prawdopodobieństwem 50% (dla <math>n</math> będącego iloczynem 2 liczb) lub większym (dla <math>n</math> mającego więcej czynników) liczby te są nietrywialną taką parą (<math>x \ne y \mod n</math>, <math>x \ne -y \mod n</math>). Jeśli tak nie jest, możemy próbować znaleźć inny zestaw liczb <math>z^2</math>, których iloczyn ma parzyste wykładniki.
Większość zaawansowanych algorytmów polega na szybszym znajdowaniu liczb o dobrych rozkładach.
== Zobacz też ==
* [[algorytm Fermata]]
* [[Algorytm faktoryzacji rho Pollarda|Algorytm rho Pollarda]]
Linia 45:
* [[algorytm Shora]]
== Linki zewnętrzne ==
* [http://www.komite.net/laurent/soft/ecm/ecm-6.0.1.html GMP-ECM (6.0.1)]
* [http://www.math.ttu.edu/~cmonico/software/ggnfs/ GGNFS]
Linia 53:
* [http://www.math.dartmouth.edu/~carlp/ Carl Pomerance List of Papers]
{{DEFAULTSORT:Rozkład na czynniki}}
[[Kategoria:Teoria liczb]]
[[Kategoria:Arytmetyka]]
|