Algorytm faktoryzacji rho Pollarda

Algorytm faktoryzacji Rho Pollarda – algorytm rozkładu liczb na czynniki pierwsze, opracowany przez Johna Pollarda w 1975 roku. Jest szczególnie efektywny przy rozkładaniu liczb mających niewielkie dzielniki. Dla liczb będących iloczynem dwóch liczb pierwszych tej samej długości, jego złożoność jest rzędu O ( n 1 / 4 polylog ( n ) ) {\displaystyle \mathrm {O} (n^{1/4}\,\operatorname {polylog} (n))} .

Algorytm ten stał się sławny, gdy użyto go do faktoryzacji ósmej liczby Fermata. Pełna faktoryzacja F8 zajęła 2 godziny pracy komputera UNIVAC 1110.

Idea

Algorytm wykorzystuje paradoks dnia urodzin, mówiący, że aby znaleźć z prawdopodobieństwem większym niż ½ dwie liczby x {\displaystyle x} i y {\displaystyle y} przystające modulo p , {\displaystyle p,} wystarczy wylosować mniej więcej 1,177 p {\displaystyle 1{,}177{\sqrt {p}}} liczb. Jeśli p {\displaystyle p} jest szukanym dzielnikiem n , {\displaystyle n,} to NWD ( | x y | , n ) > 1 {\displaystyle \operatorname {NWD} \left(|x-y|,n\right)>1} , gdyż zarówno n , {\displaystyle n,} jak i | x y | {\displaystyle \left|x-y\right|} dzielą się przez p . {\displaystyle p.} Wystarczy zatem losować kolejne liczby i sprawdzać, czy któraś różnica ma nietrywialne wspólne dzielniki z n . {\displaystyle n.}

Zamiast zapamiętywać wszystkie wylosowane liczby i sprawdzać każdą parę, algorytm wykorzystuje metodę znajdowania cyklu funkcji. Jakaś pseudolosowa funkcja modulo n {\displaystyle n} jest wybierana jako generator dla dwóch sekwencji. Jedna sekwencja wykonuje dwie iteracje, w czasie gdy druga wykonuje jedną. Niech x {\displaystyle x} oznacza aktualną wartość w pierwszej sekwencji, a y {\displaystyle y} w drugiej. W każdym kroku wyliczany jest NWD ( | x y | , n ) . {\displaystyle \operatorname {NWD} (|x-y|,n).} Jeśli wynik jest w którymś momencie równy n , {\displaystyle n,} algorytm kończy się błędem, gdyż wtedy x = y {\displaystyle x=y} i dalsze działanie będzie już tylko powtarzaniem dotychczasowych obliczeń. Jeśli w którymkolwiek momencie wynik jest większy od 1 i mniejszy od n , {\displaystyle n,} jest on dzielnikiem n . {\displaystyle n.}

Jeśli patrzymy na sekwencję modulo szukany dzielnik p , {\displaystyle p,} jej wartości muszą w końcu utworzyć cykl, o długości rzędu O ( p 1 / 2 ) . {\displaystyle \mathrm {O} (p^{1/2}).} Diagram takiej sekwencji jest przedstawiony na rysunku – przypomina grecką małą literę ρ {\displaystyle \rho } (pol. ro), stąd nazwa algorytmu.

Algorytm

Wejście: n {\displaystyle n} – liczba, którą próbujemy rozłożyć; f ( x ) {\displaystyle f(x)} – pseudolosowa funkcja modulo n . {\displaystyle n.}

Wyjście: nietrywialny czynnik n {\displaystyle n} albo błąd.

x ← 2, y ← 2; d ← 1
Dopóki d = 1:
    xf(x)
    yf(f(y))
    d ← NWD(|xy|, n)
    Jeśli 1 < d < n, to zwróć d.
    Jeśli d = n, to zasygnalizuj porażkę.

Warto zauważyć, że algorytm zawsze kończy się błędem dla n {\displaystyle n} będącego liczbą pierwszą, ale może też zwrócić błąd dla n {\displaystyle n} złożonego. Dlatego po błędzie można spróbować ponownie, z inną funkcją f ( x ) . {\displaystyle f(x).}

Aby algorytm był efektywny, zwykle używa się szybko wyliczalnych funkcji f , {\displaystyle f,} np. wielomianów ze współczynnikami całkowitymi. Najczęściej mają one postać:

f ( x ) = x 2 + c   ( mod n ) ,   c 0 , 2. {\displaystyle f(x)=x^{2}+c\ (\operatorname {mod} n),\ c\neq 0,-2.}

Bibliografia

  • Richard P. Brent. An Improved Monte Carlo Factorization Algorithm. „BIT”. 20, s. 176–184, 1980. (ang.). 
  • Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, Clifford Stein: Wprowadzenie do Algorytmów.
  • p
  • d
  • e
Teoria liczb
ogólne typy liczb
relacje
podzielność
zdefiniowane podzielnością
działania
liczby pierwsze
podstawy
testy pierwszości
sita
faktoryzacja
hipotezy
równania
diofantyczne
liniowe
kwadratowe
wyższych stopni
układy równań
powiązane zagadnienia
twierdzenia
arytmetyki modularnej
inne zagadnienia
twierdzenia limitacyjne