Test pierwszości Solovaya-Strassena

Test Solovaya-Strassenatest pierwszości opracowany przez Roberta M. Solovaya i Volkera Strassena. Jest to test probabilistyczny, który określa czy dana liczba jest liczbą złożoną, czy prawdopodobnie pierwszą. W większości zastosowań test ten został wyparty przez test Millera-Rabina, lecz ma wysoki historyczny wkład w pokazaniu praktycznego wykorzystania RSA.

Podstawa testu

Euler udowodnił, że dla liczby pierwszej p {\displaystyle p} oraz dowolnej liczby naturalnej a {\displaystyle a} względnie pierwszej z p , {\displaystyle p,}

a ( p 1 ) / 2 ( a p )   ( mod p ) , {\displaystyle a^{(p-1)/2}\equiv \left({\frac {a}{p}}\right)\ (\operatorname {mod} \,p),}

gdzie ( a p ) {\displaystyle \left({\frac {a}{p}}\right)} to symbol Legendre’a.

Symbol Legendre’a można uogólnić do symbolu Jacobiego ( a n ) , {\displaystyle \left({\frac {a}{n}}\right),} (gdzie n {\displaystyle n} może być dowolną liczbą nieparzystą) i można badać czy kongruencja

a ( n 1 ) / 2 ( a n )   ( mod n ) {\displaystyle a^{(n-1)/2}\equiv \left({\frac {a}{n}}\right)\ (\operatorname {mod} \,n)}

jest spełniona dla różnych wartości a . {\displaystyle a.} Jeżeli n {\displaystyle n} jest liczbą pierwszą, to powyższa kongruencja jest prawdziwa dla każdej wartości a . {\displaystyle a.}

Oznacza to, że a {\displaystyle a} jest świadkiem Eulera dla złożoności liczby n {\displaystyle n} jeśli:

a ( n 1 ) / 2 ( a n )   ( mod n ) {\displaystyle a^{(n-1)/2}\not \equiv \left({\frac {a}{n}}\right)\ (\operatorname {mod} \,n)}

Należy wybierać wartości a {\displaystyle a} losowo i sprawdzać czy liczba ta jest świadkiem Eulera dla n . {\displaystyle n.} Jeśli zostanie znaleziony taki świadek Eulera, czyli takie a , {\displaystyle a,} które nie spełnia kongruencji, to oznacza, że n {\displaystyle n} nie jest liczbą pierwszą (ale to nie mówi nic o nietrywialnym rozkładzie liczby n {\displaystyle n} ).

Użyteczność tego testu wynika z faktu, że dla każdej nieparzystej liczby złożonej n {\displaystyle n} przynajmniej połowa ze wszystkich

a ( Z / n Z ) {\displaystyle a\in (\mathbb {Z} /n\mathbb {Z} )^{*}}

jest świadkami Eulera. Dlatego też nie ma nieparzystej liczby złożonej n {\displaystyle n} bez dużej ilości świadków złożoności, w przeciwieństwie do liczb Carmichaela w teście pierwszości Fermata.

Algorytm i złożoność czasowa

Algorytm można opisać następująco:

Wejście: n : {\displaystyle n{:}} wartość do testu pierwszości;

k : {\displaystyle k{:}} parametr określający dokładność testu.

Wyjście: złożona, jeśli n jest liczbą złożoną, w przeciwnym wypadku prawdopodobnie pierwsza;

powtórzyć k {\displaystyle k} razy:

wybrać a {\displaystyle a} losowo ze zbioru { 2 , 3 , n 1 } {\displaystyle \{2,3\dots ,n-1\}}
x ( a n ) , {\displaystyle x\leftarrow \left({\frac {a}{n}}\right),}
jeżeli x = 0 {\displaystyle x=0} lub a ( n 1 ) / 2 mod n x {\displaystyle a^{(n-1)/2}\operatorname {mod} n\not =x} wtedy zwróć złożona.

zwróć prawdopodobnie pierwsza.

Używając szybkiego algorytmu potęgowania, czas działania algorytmu Solovaya-Strassena to O ( k log 3 n ) , {\displaystyle \mathrm {O} (k\cdot \log ^{3}n),} gdzie k {\displaystyle k} to liczba losowań a , {\displaystyle a,} natomiast n {\displaystyle n} to liczba, której pierwszość jest testowana. (Warto zauważyć, że symbol Jacobiego może być obliczony w czasie O ( ( log n ) 2 ) {\displaystyle \mathrm {O} ((\log n)^{2})} używając uogólnienia Jacobiego o prawie wzajemności reszt kwadratowych).

Prawdopodobieństwo błędnego wyniku tego algorytmu to 2 k . {\displaystyle 2^{-k}.} Przy zastosowaniu w kryptografii, jeśli wybierze się dostatecznie duże k , {\displaystyle k,} np. 100, szansa zajścia pomyłki jest tak mała, że można używać danej liczby jako pierwszej w programach kryptograficznych.

Bibliografia

  • Solovay, Robert M. and Volker Strassen. A fast Monte-Carlo test for primality. „SIAM Journal on Computing”. 6 (1), s. 84–85, 1977. 
  • Martin Dietzfelbinger, Primality Testing in Polynomial Time, From Randomized Algorithms to „PRIMES Is in P” (section 6), Series: Lecture Notes in Computer Science, Vol. 3000
  • 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