Test Lucasa-Lehmera

Test Lucasa-Lehmeratest pierwszości dla liczb Mersenne’a. Test został ułożony przez Edwarda Lucasa w 1856, a następnie ulepszony przez niego w 1878. W 1930 test został zmodyfikowany przez Derricka Henry’ego Lehmera.

Niech M p {\displaystyle M_{p}} oznacza liczbę Mersenne’a M p = 2 p 1 {\displaystyle M_{p}=2^{p}-1} dla pewnej nieparzystej liczby pierwszej p {\displaystyle p} (tzn. liczby pierwszej większej od 2). Pierwszość liczby p {\displaystyle p} można sprawdzić za pomocą prostego algorytmu podziału, gdzie p {\displaystyle p} jest wykładniczo mniejsza od M p . {\displaystyle M_{p}.} Definiuje się następujący ciąg liczb naturalnych ( S k ) : {\displaystyle (S_{k}){:}}

S k = { 4 gdy  k = 0 , S k 1 2 2 gdy  k 0. {\displaystyle S_{k}={\begin{cases}4&{\mbox{gdy }}k=0,\\S_{k-1}^{2}-2&{\mbox{gdy }}k\neq 0.\end{cases}}}

Oto kilka początkowych wyrazów tego ciągu: 4, 14, 194, 37634, ... (ciąg A003010 w OEIS[1]).

Test Lucasa-Lehmera orzeka, że liczba M p {\displaystyle M_{p}} jest pierwsza wtedy i tylko wtedy, gdy jest dzielnikiem wyrazu o numerze ( p 2 ) {\displaystyle (p-2)} w tym ciągu, co krótko zapisuje się kongruencją:

S p 2 0 ( mod M p ) . {\displaystyle S_{p-2}\equiv 0{\pmod {M_{p}}}.}

Resztę z dzielenia liczby S p 2 {\displaystyle S_{p-2}} przez M p {\displaystyle M_{p}} nazywa się residuum Lucasa-Lehmera liczby p . {\displaystyle p.} Istotę testu można zatem streścić sformułowaniem:

liczba Mersenna M p {\displaystyle M_{p}} jest pierwsza wtedy i tylko wtedy, gdy residuum Lucasa-Lehmera liczby p {\displaystyle p} równe jest zeru.

Za pomocą pseudokodu test można przedstawić w następujący sposób:

// Ustalamy, czy Mp = 2p − 1 jest pierwsza
Lucas-Lehmer(p)
    niech s ← 4
    niech M ← 2p − 1
    powtórz p − 2 razy:
        s ← ((s × s) − 2) mod M
    jeśli s = 0 zwróć PIERWSZA w przeciwnym razie zwróć ZŁOŻONA

Działanie mod M w każdej iteracji zapewnia, że wszystkie pośrednie wyniki są co najwyżej p {\displaystyle p} -bitowe (w innym przypadku liczba bitów byłaby dublowana w każdej iteracji).

Złożoność czasowa

W powyższym algorytmie podczas każdej iteracji wykonywane są dwie kosztowne operacje: mnożenie s × s i operacja modulo mod M. Operacja mod M może być wykonywana szczególnie efektywnie na standardowych dwójkowych systemach poprzez dokonanie następującej obserwacji

k ( k mod 2 n ) + k / 2 n ( mod 2 n 1 ) . {\displaystyle k\equiv (k\,{\bmod {\,}}2^{n})+\lfloor k/2^{n}\rfloor {\pmod {2^{n}-1}}.}

Mówi ona, że najmniej znaczące n {\displaystyle n} bity spośród k {\displaystyle k} plus pozostałe bity k , {\displaystyle k,} są równoważne k {\displaystyle k} modulo 2 n 1. {\displaystyle 2^{n}-1.} Równoważność może być stosowana powtarzalnie do momentu co najwyżej n {\displaystyle n} bitów reszty. W tym postępowaniu reszta po wykonaniu dzielenia k {\displaystyle k} przez liczbę Mersenne’a 2 n 1 {\displaystyle 2^{n}-1} jest obliczona bez używania dzielenia. Na przykład:

916 mod 2 5 1 = 1110010100 2 mod 2 5 1 = 11100 2 + 10100 2 mod 2 5 1 = 110000 2 mod 2 5 1 = 1 2 + 10000 2 mod 2 5 1 = 10001 2 mod 2 5 1 = 10001 2 = 17. {\displaystyle {\begin{aligned}916{\bmod {2}}^{5}-1&=1110010100_{2}{\bmod {2}}^{5}-1\\&=11100_{2}+10100_{2}{\bmod {2}}^{5}-1\\&=110000_{2}{\bmod {2}}^{5}-1\\&=1_{2}+10000_{2}{\bmod {2}}^{5}-1\\&=10001_{2}{\bmod {2}}^{5}-1\\&=10001_{2}\\&=17.\end{aligned}}}

Ponadto, ponieważ s × s nigdy nie przekroczy M 2 < 2 2 p , {\displaystyle M^{2}<2^{2p},} ta prosta technika zbiega w co najwyżej 1 p {\displaystyle p} -bitowy dodatku (ewentualnie przeprowadza z p {\displaystyle p} -tego bitu w pierwszy bit), co może być wykonane w liniowym czasie. Algorytm ten posiada wyjątkowy przypadek. Daje 2 n 1 {\displaystyle 2^{n}-1} dla mnożenia modulo zamiast poprawnej wartości 0. Jednak ten przypadek jest łatwy do wykrycia i naprawienia.

Przykłady

Liczba Mersenne’a M3 = 7 jest pierwsza. Test Lucasa-Lehmera sprawdza to w następujący sposób. Początkowo s {\displaystyle s} jest ustalona i równa 4, później jest modyfikowana 3−2 = 1 raz:

  • s ← ((4 × 4) − 2) mod 7 = 0.

Ponieważ końcowa wartość s {\displaystyle s} wynosi 0, wnioskujemy, że M3 jest pierwsza.

Z drugiej strony, M11 = 2047 = 23 × 89 nie jest pierwsza. Powtórnie, s {\displaystyle s} jest ustalona i równa 4, ale teraz jest modyfikowana 11−2 = 9 razy:

  • s ← ((4 × 4) − 2) mod 2047 = 14
  • s ← ((14 × 14) − 2) mod 2047 = 194
  • s ← ((194 × 194) − 2) mod 2047 = 788
  • s ← ((788 × 788) − 2) mod 2047 = 701
  • s ← ((701 × 701) − 2) mod 2047 = 119
  • s ← ((119 × 119) − 2) mod 2047 = 1877
  • s ← ((1877 × 1877) − 2) mod 2047 = 240
  • s ← ((240 × 240) − 2) mod 2047 = 282
  • s ← ((282 × 282) − 2) mod 2047 = 1736

Ponieważ końcowa wartość s {\displaystyle s} nie jest równa  0, wnioskujemy, że M11 = 2047 nie jest pierwsza. Mimo że M11 = 2047 posiada nietrywialne czynniki, test Lucasa-Lehmera nie daje żadnych wskazówek, jakie mogą one być.

Dowód

Dowód poprawności testu przedstawiany tutaj jest prostszy niż oryginalny dowód podany przez Lehmera. Przywołajmy definicję

s i = { 4 gdy  i = 0 , s i 1 2 2 w pozostałych przypadkach. {\displaystyle s_{i}={\begin{cases}4&{\text{gdy }}i=0,\\s_{i-1}^{2}-2&{\text{w pozostałych przypadkach.}}\end{cases}}}

Naszym celem jest pokazanie, że M p {\displaystyle M_{p}} jest pierwsza wtedy i tylko wtedy, gdy s p 2 0 ( mod M p ) . {\displaystyle s_{p-2}\equiv 0{\pmod {M_{p}}}.}

Ciąg s i {\displaystyle \langle s_{i}\rangle } jest dany rekurencyjnie z rozwiązaniem w jawnej postaci. Niech ω = 2 + 3 {\displaystyle \omega =2+{\sqrt {3}}} oraz ω ¯ = 2 3 . {\displaystyle {\overline {\omega }}=2-{\sqrt {3}}.} Poprzez indukcję dostajemy s i = ω 2 i + ω ¯ 2 i {\displaystyle s_{i}=\omega ^{2^{i}}+{\overline {\omega }}^{2^{i}}} dla każdego i : {\displaystyle i{:}}

s 0 = ω 2 0 + ω ¯ 2 0 = ( 2 + 3 ) + ( 2 3 ) = 4 {\displaystyle s_{0}=\omega ^{2^{0}}+{\overline {\omega }}^{2^{0}}=\left(2+{\sqrt {3}}\right)+\left(2-{\sqrt {3}}\right)=4}

i

s n = s n 1 2 2 = ( ω 2 n 1 + ω ¯ 2 n 1 ) 2 2 = ω 2 n + ω ¯ 2 n + 2 ( ω ω ¯ ) 2 n 1 2 = ω 2 n + ω ¯ 2 n . {\displaystyle {\begin{aligned}s_{n}&=s_{n-1}^{2}-2\\&=\left(\omega ^{2^{n-1}}+{\overline {\omega }}^{2^{n-1}}\right)^{2}-2\\&=\omega ^{2^{n}}+{\overline {\omega }}^{2^{n}}+2(\omega {\overline {\omega }})^{2^{n-1}}-2\\&=\omega ^{2^{n}}+{\overline {\omega }}^{2^{n}}.\end{aligned}}}

Ostatni krok wykorzystuje ω ω ¯ = ( 2 + 3 ) ( 2 3 ) = 1. {\displaystyle \omega {\overline {\omega }}=\left(2+{\sqrt {3}}\right)\left(2-{\sqrt {3}}\right)=1.} Jawna forma jest używana zarówno w dowodzie dostateczności, jak i konieczności.

Dostateczność

Celem jest pokazanie, że s p 2 0 ( mod M p ) {\displaystyle s_{p-2}\equiv 0{\pmod {M_{p}}}} implikuje, że M p {\displaystyle M_{p}} jest pierwsza. Bezpośredni dowód wykorzystujący elementarną teorię grup daną przez J. W. Bruce[2], jak nawiązuje Jason Wojciechowski[3].

Przypuśćmy, że s p 2 0 ( mod M p ) . {\displaystyle s_{p-2}\equiv 0{\pmod {M_{p}}}.} Wówczas

ω 2 p 2 + ω ¯ 2 p 2 = k M p {\displaystyle \omega ^{2^{p-2}}+{\overline {\omega }}^{2^{p-2}}=kM_{p}}

dla pewnego całkowitego k , {\displaystyle k,} więc

ω 2 p 2 = k M p ω ¯ 2 p 2 . {\displaystyle \omega ^{2^{p-2}}=kM_{p}-{\overline {\omega }}^{2^{p-2}}.}

Mnożąc przez ω 2 p 2 , {\displaystyle \omega ^{2^{p-2}},} otrzymujemy

( ω 2 p 2 ) 2 = k M p ω 2 p 2 ( ω ω ¯ ) 2 p 2 . {\displaystyle \left(\omega ^{2^{p-2}}\right)^{2}=kM_{p}\omega ^{2^{p-2}}-(\omega {\overline {\omega }})^{2^{p-2}}.}

Zatem

ω 2 p 1 = k M p ω 2 p 2 1. ( 1 ) {\displaystyle \omega ^{2^{p-1}}=kM_{p}\omega ^{2^{p-2}}-1.\qquad \qquad (1)}

Dla uzyskania sprzeczności, przypuśćmy, że M p {\displaystyle M_{p}} jest złożona, i niech q {\displaystyle q} będzie najmniejszym pierwszym czynnikiem liczby M p . {\displaystyle M_{p}.} Liczby Mersenne’a są nieparzyste, więc q > 2. {\displaystyle q>2.} Niech Z q {\displaystyle \mathbb {Z} _{q}} będzie zbiorem liczb całkowitych modulo q {\displaystyle q} i niech X = { a + b 3 a , b Z q } . {\displaystyle X=\left\{a+b{\sqrt {3}}\mid a,b\in \mathbb {Z} _{q}\right\}.} Mnożenie w X {\displaystyle X} jest zdefiniowane, jak następuje

( a + 3 b ) ( c + 3 d ) = [ ( a c + 3 b d ) mod q ] + 3 [ ( a d + b c ) mod q ] . {\displaystyle \left(a+{\sqrt {3}}b\right)\left(c+{\sqrt {3}}d\right)=[(ac+3bd)\,{\bmod {\,}}q]+{\sqrt {3}}[(ad+bc)\,{\bmod {\,}}q].}

Oczywiście to mnożenie jest działaniem wewnętrznym, to znaczy produkt liczb z X {\displaystyle X} przechodzi w siebie. Rozmiar X {\displaystyle X} oznaczamy przez | X | . {\displaystyle |X|.}

Gdy q > 2 , {\displaystyle q>2,} ω {\displaystyle \omega } i ω ¯ {\displaystyle {\overline {\omega }}} należą do X {\displaystyle X} [a]. Podzbiór elementów X {\displaystyle X} z ich odwrotnościami tworzy grupę, którą oznaczamy X , {\displaystyle X^{*},} a jej rząd | X | . {\displaystyle |X^{*}|.} Jeden z elementów X {\displaystyle X} nie posiada odwrotności, jest to 0, więc | X | | X | 1 = q 2 1. {\displaystyle |X^{*}|\leqslant |X|-1=q^{2}-1.}

Teraz M p 0 ( mod q ) {\displaystyle M_{p}\equiv 0{\pmod {q}}} i ω X , {\displaystyle \omega \in X,} więc

k M p ω 2 p 2 = 0 {\displaystyle kM_{p}\omega ^{2^{p-2}}=0}

w X . {\displaystyle X.}

Następnie, wykorzystując równanie (1),

ω 2 p 1 = 1 {\displaystyle \omega ^{2^{p-1}}=-1}

w X {\displaystyle X} i podnosząc obie strony do kwadratu, otrzymujemy

ω 2 p = 1. {\displaystyle \omega ^{2^{p}}=1.}

Zatem ω {\displaystyle \omega } należy do X {\displaystyle X^{*}} i posiada odwrotność ω 2 p 1 . {\displaystyle \omega ^{2^{p}-1}.} Co więcej, rząd ω {\displaystyle \omega } dzieli 2 p {\displaystyle 2^{p}} , jednak ω 2 p 1 1 , {\displaystyle \omega ^{2^{p-1}}\neq 1,} więc nie dzieli on 2 p 1 {\displaystyle 2^{p-1}} . Wobec tego rząd ω {\displaystyle \omega } wynosi dokładnie 2 p . {\displaystyle 2^{p}.}

Rząd elementu jest nie większy niż rząd (rozmiar) grupy, więc

2 p | X | q 2 1 < q 2 . {\displaystyle 2^{p}\leqslant |X^{*}|\leqslant q^{2}-1<q^{2}.}

Ale q {\displaystyle q} jest najmniejszym pierwszym czynnikiem rozkładu liczby złożonej M p , {\displaystyle M_{p},} więc

q 2 M p = 2 p 1. {\displaystyle q^{2}\leqslant M_{p}=2^{p}-1.}

To prowadzi do sprzeczności 2 p < 2 p 1. {\displaystyle 2^{p}<2^{p}-1.} Dlatego M p {\displaystyle M_{p}} jest pierwsza.

Konieczność

Z drugiej strony, celem jest pokazanie, że pierwszość M p {\displaystyle M_{p}} implikuje s p 2 0 ( mod M p ) . {\displaystyle s_{p-2}\equiv 0{\pmod {M_{p}}}.} Poniższy uproszczony dowód przedstawił Öystein J.R.

Gdy 2 p 1 7 ( mod 12 ) {\displaystyle 2^{p}-1\equiv 7{\pmod {12}}} dla nieparzystych p > 1 , {\displaystyle p>1,} z własności symbolu Legendre’a wynika, że ( 3 | M p ) = 1. {\displaystyle (3|M_{p})=-1.} To oznacza, że 3 jest podwójnym nieresiduum modulo M p . {\displaystyle M_{p}.} Dzięki kryterium Eulera, jest to równoważne

3 M p 1 2 1 ( mod M p ) . {\displaystyle 3^{\frac {M_{p}-1}{2}}\equiv -1{\pmod {M_{p}}}.}

Natomiast 2 jest podwójnym residuum modulo M p , {\displaystyle M_{p},} ponadto 2 p 1 ( mod M p ) {\displaystyle 2^{p}\equiv 1{\pmod {M_{p}}}} i stąd 2 2 p + 1 = ( 2 p + 1 2 ) 2 ( mod M p ) . {\displaystyle 2\equiv 2^{p+1}=\left(2^{\frac {p+1}{2}}\right)^{2}{\pmod {M_{p}}}.} Tym razem kryterium Eulera pozwala napisać

2 M p 1 2 1 ( mod M p ) . {\displaystyle 2^{\frac {M_{p}-1}{2}}\equiv 1{\pmod {M_{p}}}.}

Połączenie tych dwóch równoważnych relacji daje

24 M p 1 2 ( 2 M p 1 2 ) 3 ( 3 M p 1 2 ) ( 1 ) 3 ( 1 ) 1 ( mod M p ) . {\displaystyle 24^{\frac {M_{p}-1}{2}}\equiv \left(2^{\frac {M_{p}-1}{2}}\right)^{3}\left(3^{\frac {M_{p}-1}{2}}\right)\equiv (1)^{3}(-1)\equiv -1{\pmod {M_{p}}}.}

Niech σ = 2 3 {\displaystyle \sigma =2{\sqrt {3}}} i zdefiniujmy X {\displaystyle X} tak jak wcześniej jako pierścień X = { a + b 3 a , b Z M p } . {\displaystyle X=\{a+b{\sqrt {3}}\mid a,b\in \mathbb {Z} _{M_{p}}\}.} Wówczas w pierścieniu X {\displaystyle X} otrzymujemy

( 6 + σ ) M p = 6 M p + ( 2 M p ) ( 3 M p ) = 6 + 2 ( 3 M p 1 2 ) 3 = 6 + 2 ( 1 ) 3 = 6 σ , {\displaystyle {\begin{aligned}(6+\sigma )^{M_{p}}&=6^{M_{p}}+\left(2^{M_{p}}\right)\left({\sqrt {3}}^{M_{p}}\right)\\&=6+2\left(3^{\frac {M_{p}-1}{2}}\right){\sqrt {3}}\\&=6+2(-1){\sqrt {3}}\\&=6-\sigma ,\end{aligned}}}

gdzie pierwsza równość wykorzystuje dwumian Newtona w skończonej dziedzinie, która przedstawia się

( x + y ) M p x M p + y M p ( mod M p ) , {\displaystyle (x+y)^{M_{p}}\equiv x^{M_{p}}+y^{M_{p}}{\pmod {M_{p}}},}

a druga równość wykorzystuje małe twierdzenie Fermata, które brzmi

a M p a ( mod M p ) {\displaystyle a^{M_{p}}\equiv a{\pmod {M_{p}}}}

dla każdej liczby całkowitej a . {\displaystyle a.} Wartość σ {\displaystyle \sigma } została wybrana tak, aby ω = ( 6 + σ ) 2 24 . {\displaystyle \omega ={\frac {(6+\sigma )^{2}}{24}}.} Co za tym idzie, może być wykorzystana do wyliczenia ω M p + 1 2 {\displaystyle \omega ^{\frac {M_{p}+1}{2}}} w pierścieniu X {\displaystyle X} jako

ω M p + 1 2 = ( 6 + σ ) M p + 1 24 M p + 1 2 = ( 6 + σ ) ( 6 + σ ) M p 24 24 M p 1 2 = ( 6 + σ ) ( 6 σ ) 24 = 1. {\displaystyle {\begin{aligned}\omega ^{\frac {M_{p}+1}{2}}&={\frac {(6+\sigma )^{M_{p}+1}}{24^{\frac {M_{p}+1}{2}}}}\\&={\frac {(6+\sigma )(6+\sigma )^{M_{p}}}{24\cdot 24^{\frac {M_{p}-1}{2}}}}\\&={\frac {(6+\sigma )(6-\sigma )}{-24}}\\&=-1.\end{aligned}}}

To co pozostaje, to mnożenie obu stron równania przez ω ¯ M p + 1 4 {\displaystyle {\overline {\omega }}^{\frac {M_{p}+1}{4}}} i wykorzystanie ω ω ¯ = 1 , {\displaystyle \omega {\overline {\omega }}=1,} co daje

ω M p + 1 2 ω ¯ M p + 1 4 = ω ¯ M p + 1 4 ω M p + 1 4 + ω ¯ M p + 1 4 = 0 ω 2 p 1 + 1 4 + ω ¯ 2 p 1 + 1 4 = 0 ω 2 p 2 + ω ¯ 2 p 2 = 0 s p 2 = 0. {\displaystyle {\begin{aligned}\omega ^{\frac {M_{p}+1}{2}}{\overline {\omega }}^{\frac {M_{p}+1}{4}}&=-{\overline {\omega }}^{\frac {M_{p}+1}{4}}\\\omega ^{\frac {M_{p}+1}{4}}+{\overline {\omega }}^{\frac {M_{p}+1}{4}}&=0\\\omega ^{\frac {2^{p}-1+1}{4}}+{\overline {\omega }}^{\frac {2^{p}-1+1}{4}}&=0\\\omega ^{2^{p-2}}+{\overline {\omega }}^{2^{p-2}}&=0\\s_{p-2}&=0.\end{aligned}}}

Skoro s p 2 {\displaystyle s_{p-2}} jest 0 w X , {\displaystyle X,} jest również 0 modulo M p . {\displaystyle M_{p}.}

Zastosowanie

Test Lucasa-Lehmera jest testem pierwszości używanym przez Great Internet Mersenne Prime Search do znajdowania dużych liczb pierwszych. Te poszukiwania są bardzo owocne i przyczyniły się do znalezienia wielu największych liczb pierwszych znanych dzisiaj[4]. Test jest uważany za wartościowy, ponieważ potrafi zbadać pierwszość olbrzymich liczb zawartych w zbiorach o dużej liczbie elementów w przeciągu przystępnego wymiaru czasu. W odróżnieniu od równie szybkiego testu Pépina dla każdej liczby Fermata, który może być używany jedynie na wiele mniejszych zbiorach tak olbrzymich liczb, zanim zakres obliczeniowy się wyczerpie.

Uwagi: test jest bardzo szybki i bardzo prosty. Przy jego użyciu znaleziono największe dotąd znane liczby pierwsze. Test wymaga jak najszybszego algorytmu mnożenia np. szybkiej transformaty Fouriera. Ponieważ mnożenie liczb zapisanych w systemie liczbowym o danej podstawie jest w pewnym sensie splotem funkcji (cyfra jako wartość w funkcji potęgi podstawy), a transformata Fouriera splotu dwóch funkcji jest iloczynem ich transformat, zatem wielkie liczby naturalne można mnożyć szybko przez siebie, robiąc szybką transformatę Fouriera z ich cyfr, a następnie szybką transformatę odwrotną iloczynu tych transformat.

Implementacje

Kod w Mathematica

Krótki kod w języku Mathematica (tutaj sprawdzający liczbę pierwszą Mersenne’a Davida Slowinskiego & Paula Gage’a z 4 stycznia, 1994 (znaną 33.) z wykładnikiem p = 859433 {\displaystyle p=859433} ) w czasie nieco ponad 2 godzin na komputerze osobistym z procesorem Skylake o częstotliwości 2,9 GHz): Funkcja Mod[s, M] zwraca na końcu 0 jedynie jeśli M {\displaystyle M} jest liczbą pierwszą.

M = 2^859433 - 1;
s = 4;
AbsoluteTiming[
 Monitor[Do[
   s = Mod[s*s - 2, M], {n, 1, 859433 - 2}], {ProgressIndicator[
    n, {1, 859433 - 2}], n}]];
Print[Mod[s, M]]

Kod w Python

Przykładowy kod w języku Python 3 wykorzystujący bibliotekę gmpy2, kod zawiera optymalizację dzielenia modulo (patrz wyżej – Złożoność czasowa) oraz monitorowanie pozostałego czasu wykonania (estymowanego).

'''
Dla liczby p > 2, funkcja zwraca True jeżeli 2^p-1 jest pierwsza, w innym razie zwraca False
'''
from gmpy2 import *
from datetime import *

def Lucas_Lehmer(p):
    s = xmpz(4)
    M = xmpz(2 ** p) - 1
    startt = datetime.now()
    for i in range(0, p - 2):
        time_elapsed = datetime.now() - startt
        speed = i / (time_elapsed.total_seconds() + 1)
        remaining = (p - 2 - i) / (speed + 1)
        if i % int(speed + 1) == 0:
            print('Czas pozostały (hh:mm:ss.ms) {} czas wykonywania {}'.format(timedelta(seconds=remaining), time_elapsed))
        if (s.bit_length() <= p):
            # Podstawowa wersja algorytmu dla s o bitach <= p
            s = s * s - 2
            s = f_mod(s, M)
        else:
            # Optymalizacja dla s bitów > p
            s = s * s - 2
            md = s.bit_length() % 2
            right = s.bit_length() // 2 + md
            left = s.bit_length() // 2
            s = s[0:right] + f_mod(s[left:], M)

    if s == 0:
        return True
    else:
        return False

Zobacz też

Uwagi

  1. Formalnie, ω + T 2 3 {\displaystyle \omega +\langle T^{2}-3\rangle } i ω ¯ + T 2 3 {\displaystyle {\overline {\omega }}+\langle T^{2}-3\rangle } należą do X . {\displaystyle X.} Poprzez nadużycia językowe ω {\displaystyle \omega } and ω ¯ {\displaystyle {\overline {\omega }}} są identyfikowane z ich obrazami w X {\displaystyle X} zgodnie z naturalnym pierścieniem homomorfizmu z Z [ 3 ] {\displaystyle \mathbb {Z} [{\sqrt {3}}]} w X , {\displaystyle X,} który przyporządkowuje 3 {\displaystyle {\sqrt {3}}} dla T . {\displaystyle T.}

Przypisy

  1. Encyklopedia ciągów liczb całkowitych w wersji on-line
  2. J.W.J.W. Bruce J.W.J.W., A Really Trivial Proof of the Lucas-Lehmer Test, „The American Mathematical Monthly”, 4 (100), 1993, s. 370–371, DOI: 10.2307/2324959, JSTOR: 2324959 .
  3. Jason Wojciechowski. Mersenne Primes, An Introduction and Overview. 2003.
  4. The Largest Known Primes – A Summary. The Prime Pages. (ang.).

Linki zewnętrzne

  • Eric W.E.W. Weisstein Eric W.E.W., Lucas-Lehmer test, [w:] MathWorld, Wolfram Research  (ang.).
  • GIMPS. The Great Internet Mersenne Prime Search. (ang.).
  • Tony Reix: A LLT-like test for proving the primality of Fermat numbers. Cornell University, 2007-05-24. (ang.).
  • Lucas-Lehmer test. MersenneWiki. [zarchiwizowane z tego adresu (2018-04-15)]. (ang.).
  • p
  • d
  • e
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