On 24.10.2015 18:52, osobliwy nick wrote:
> Mniej więcej 2 lata temu toczyłem tu kilka dyskusji o algorytmach
> znajdowania liczb pierwszych oraz obliczania logarytmu dyskretnego.
> Dotyczyły one algorytmu, który wówczas sformułowałem oraz aktualnego
> stanu wiedzy w zakresie niniejszej tematyki. Na zakończenie
> doprecyzowałem wtedy ten algorytm i porzuciłem temat.
>
> Dziś wróciłem do tamtych notatek i chcę Wam przedstawić jeszcze raz
> pewien algorytm umożliwiający obliczanie logarytmu dyskretnego przy
> podstawie 2, tj. znalezienie dla pewnej (nieparzystej) liczby g
> takiego najmniejszego n, że g dzieli 2^n-1 bez reszty. Jeżeli II_(i)
> (p_i^(e_i)) jest faktoryzacją liczby g algorytm ma złożoność:
2^n-1
Niezależnie od tego, co to ma wspolnego z logarytmem dyskretnym?
g=5.
n = 4, bo 2^4-1 = 16-1=15
Ale g =\= 2^4-1 w Z_7.
15 = 1 =/= 5. w Z_7
> O[sum_(i) (p_i*log(p_i) + exp((ln(p_i-1)*ln ln(p_i-1))^0,5))]
>
> przy zastosowaniu metody sita kwadratowego do faktoryzacji liczb
> p_i-1 (złożoność obliczeniowa faktoryzacji liczby n metodą sita
> kwadratowego wynosi exp((ln(n)*ln ln(n))^0,5). Jeżeli zastosujemy
> inną metodę np. GNFS, obliczanie (faktoryzacja) składnika p_i-1
> będzie wymagało innej złożoności (ponadto niekiedy będzie możliwa
> faktoryzacja liczb mniejszych niż p_i-1, gdyż czas stopu d -
> zdefiniowany w dalszej części niekiedy będzie mniejszy aniżeli
> p_i-1). Algorytm najlepiej działa dla liczb gładkich i wydaje się być
> wydajniejszy niż redukcja Pohliga-Hellmana (jeżeli dobrze oszacowałem
> jego złożoność obliczeniową).
>
> Algorytm:
>
> Zdefiniujmy ciąg określony rekurencyjnie dla liczby x=1 oraz wybranej
> nieparzystej liczby g (dla której obliczymy logarytm dyskretny):
>
> - 0,5*x + g/2 -->> jeżeli x jest nieparzyste - 0,5*x -->> jeżeli x
> jest parzyste
Coś mi się kołacze, żę tym ciągiem się zajęliśmy ostatnio i
przepisaliśmy do formy, która była łatwiejsza do interpretacji.
No tak, umiesz powiedzieć, kiedy liczba 2^n -1 dzieli dane g.
Rozbijasz g na iloczyn liczb pierwszych. p1*p2*...*pn
Dla każdego p^k badasz kongruencje liczb 2^n-1 mod p.
Będzie to skończony ciąg o okresie będącym dzielnikiem (p-1)p^(k-1), w
którymś momencie trafisz na 0. (to tylko grupa multiplikatywna modulo p^k).
Wychodzi, że liczba g dzieli 2^n-1 dla n postaci:
n = d_p^k * coś + a_p. dla dowolnego coś
Albo, inaczej mówiąc:
n = a_p mod d_p^k
Masz zestaw takich równań, szukasz n spełniającego je wszystkie
(nie bardzo rozumiem, jak je wyznaczasz. Tu masz sprawdzony
tysiącletni algorytm:
https://pl.wikipedia.org/wiki/Chi%C5%84skie_twierdzenie_o_resztach )
W ostateczności uzyskujesz algorytm spełniające podzielność
na wszystkie potęgi, a więc i iloraz.
Wszystko pięknie, (może trochę rozwlekle).
Tylko gdzie ten obiecany logarytm dyskretny?
pzdr
bartekltg