Poniżej cały cytat tamtego dowodu.
W dniu czwartek, 7 marca 2013 14:05:32 UTC+1 użytkownik bartekltg napisał:
> W dniu 2013-03-03 09:42,
omnia_...@interia.pl pisze:
>
>
> Omnia_vanitas zaproponował dla każdego d następujący ciąg
> zdefiniowany rekurencyjnie
>
> x_0 = 1.
>
> x_{n+1} = f(x) = x_n/2 dla x_n parzystego
> = (x_n+d)/2 dla nieparzystego.
>
> Szukamy okresu tego ciągu, inaczej w wątku zwanemu
> punktem stopu,
>
> Najmniejsze t>0, takie, że x_t = 1.
>
>
> Oraz hipotezę: d jest pseudopierwsza, <=> w powiązanym
> z nią ciągu t jest dzielnikiem (d-1)
>
>
> Poszlaki:
>
> Pierwszoplanowość i wyrażenie d-1 od razu nasuwa małe
> twierdzenie Fermata
>
> 2^(d-1) = 1 (mod d)
>
> jeśli d jest pseudopierwsze dla 2.
>
>
> Rozpatrujemy więc kolejne potęgi 2 modulo d.
> Chwila przypomnienia ze szkoły, okaże się, że
> biegamy w kółko po grupie multiplikatywnej
> modulo p. Definiujemy ją jako zbiór liczb
> naturalnych (bez zera) względnie pierwszych z d,
> z działaniem mnożenia.
> Jeśli d jest pierwsze, wszystkie liczby <d sa z nią
> względnie pierwsze, stąd rząd (liczba elementów)
> grupy wynosi (d-1).
> Skądinąd dla danego elementu g w grupie skończonej
> zawsze istneije takie k, że g^k =1, a twierdzenia
> Lagrange'a mówi nam, że k musi być dzielnikiem rzędu
> grupy. czyli k dzieli d-1. I tak z grubsza idzie
> dowód MTF.
>
>
> Prześledźmy naszą iterację dla d=11 i d=15.
>
> x {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
> f(x) {6, 1, 7, 2, 8, 3, 9, 4, 10, 5}
>
> x {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14}
> f(x){8, 1, 9, 2, 10, 3, 11, 4, 12, 5, 13, 6, 14, 7}
>
> Dla pierwszego przypadku idąc po tej permutacji
> przebiegamy wszystkie elementy (ale nie musi tak być!,
> patrz 7)
>
> W drugiem, liczby podzielne na 3 i 5 mają własne cykle.
> Jeśli je usuniemy, zostaną tylko elementy względnie
> pierwsze z 15. Znajome...
>
>
>
> ******************************************
> Koniec zabawy, dowody;)
>
> Badając pseudopierwszosć liczby d bierzemy liczbę 2
> i podnosimy ją do kolejnych potęg.
>
> Czyli budujemy ciąg w grupie multiplikatywnej mod d
> postaci
> x_0=1;
> x_1 =2;
> x_{n+1} = 2 * x_{n} (mod p)
>
> teraz, przez t>0 to najmniejsza liczba t.że x_t = 1
> Znów znajome.
> Liczba jest pseudopierwsza, gdy t dzieli (d-1). Patrz dowód MTF.
> Znajome:)
>
>
> Ciąg wątkodawcy to nic innego niż ten sam ciąg,
> ale w _odwrotnej_ kolejności (teraz wydaje się trywialne)
>
> f(x) to to samo co x/2 w (Z/dZ)*.
>
> Jak działa y = 2*x.
> Liczby x < d/2 zostają zamienione na y=2x, zawsze parzyste.
> Liczby x > d/2 (u nas d jest nieparzyste, wiec równości nigdy nie ma)
> zostaje zamieniona na y = 2x - d. (bo 2x in [d, 2d)),
> wynik zawsze nieparzysty
>
>
> Iteracja wątkodawcy.
>
> x = (y)/2 dla y parzystego., x w wyniku zawsze <d/2.
> Odwracając y = 2x. Zgadza się.
> x = (y+d)/2 dla y nieparzystego. wynik zawsze > d/2!
> Odwracając y = 2x - d. Zgadza się.
>
> A więc jeśli w ciągu wątkodawcy x_t =1,
> to oznacza, że również 2^t =1 (mod d)
> Jeśli t dzieli (d-1) to (d-1)=m*t
>
> 2^(d-1) = 2^(t*m) = (2^t)^m = 1^m = 1 (mod p)
>
> czyli d jest pseudopierwsza przy podstawie 2.
> Co kończy nasz zamachany dowód.
>
>
>
> Te ciągi można uogólniać dla innych podstaw.
> Np dla 3:
> x = x/3
> = (x+d)/3
> = (x+2d)/2 //dla odpowiednich podzielności x przez 3.
>
>
>
> Algorytmicznie porównywalne jest to do liczenia tego samego ciągu
> w przód, czyli ciągle mnożąc przez 2.
> Oczywiście, potęgowanie binarne będzie znacznie wydajniejsze
> dla dużych liczb.
>
>
> pzdr
> bartekltg
Dowód, którego wtedy szukałem to dowód, testu pierwszości liczby p za pomocą ciągu zdefiniowanego rekurencyjnie:
0,5x+p/2 - gdy x nieparzyste
0,5x - gdy x parzyste
test ten mówi, że gdy ciąg zapętla się dla wybranego p i x=1 po (p-1)/c iteracjach, to p jest liczbą pierwszą lub pseudopierwszą. Dodatkowo miałem przeświadczenie, że ciąg zapętla się dla każdej liczby pierwszej p.
> Nie piszę tam 'w ciagu wątkodawcy wystąpi to a to'.
> Jest tam napisana "Jeśli w ciągu wątkodawcy [wystąpi] x_t =1,
> to będzie to a to".
Fakt. Zatem na tym etapie z tego wynika, że mamy dowód dla liczb pierwszych i pseudopierwszych p, które się zapętlają, ale nie wiemy, czy algorytm zadziała dla dowolnych liczb pierwszych i pseudopierwszych p (czy dla niektórych p ciąg nie będzie rozbieżny do nieskończoności lub nie wpadnie w inną pętlę taka, która nie osiąga liczby 1). Przy czym przypadek rozbieżności do nieskończoności można łatwo wykluczyć, gdyż w tym odwróconym ciągu nie może istnieć liczba większa niż p. Dowód:
rozważmy najmniejszy wyraz x_n w ciągu:
2x, gdy x < p/2
2x - p, gdy x > p/2
iterowanym dla x=1, taki, że jest on liczbą większą niż p. Wówczas na pewno poprzedni wyraz tego ciągu nie mógł powstać w wyniku operacji "2x, gdy x < p/2", bo x_n > p/2. Jednak wyraz ten nie mógł także powstać w wyniku operacji 2x-p, bo jeśli 2x-p=x_n, to x=(x_n+p)/2, z tego wynika, że wyraz poprzedzający x_n jest także większy od p - a to sprzeczne z założeniem, że x_n jest najmniejszym wyrazem w ciągu większym od p.
> > Po drugie skąd pewność, że t (liczba iteracji), dla jakiejś liczby p
> > (w ciągu zdefiniowanym 0,5x+p/2) będzie równe akurat ord_p(2) lub
> > wielokrotność ord_p(2)?
>
> Z równoważności obu ciągów.
No tak, ale skąd pewność, że ten odwrócony ciąg zwróci x=1 po dokładnie ord_p(2) iteracji?