Badanie pierwszości liczby, klasa NP i test Rabina

advertisement
Badanie pierwszości liczby, klasa NP i test Rabina
Mateusz Chynowski
11 stycznia 2009
Liczby pierwsze są bardzo istotne zarówno w matematyce, jak i informatyce. W tej
drugiej nauce istnieje dość poważny problem niepewnych wyników.
Najczęstszymi zagadnieniami dotyczącymi liczb pierwszych są:
• problem pierwszości – odpowiadający na pytanie: „Czy dana liczba jest pierwsza?”
• problem złożoności – odpowiadający na pytanie: „Czy dana liczba jest złożona?”
W algorytmach zwykłych oba rodzaje problemów nie różnią za bardzo. Rozwiązując jedeno
z zagadnień rozwiązujemy tym samym drugie. Inaczej jest z algorytmami niedeterministycznymi, czyli takimi, których działania nie możemy przewidzieć. Zawiera ona najczęściej instrukcję choise. Algorytmy losowe należą do algorytmów niedeterministycznych.
Zwykłe algorytmy badające pierwszość są wykładnicze. Najłatwiej przekonać się o tym
badając pierwszość z definicjii
Definicja 1 Liczba pierwsza – liczba naturalna większa od 1, która ma dokładnie dwa
dzielniki naturalne: 1 oraz samą siebie.
Sprawdzamy zatem, czy dana liczba n nie jest podzielna przez żadną z liczb z przedziału
[2;n − 1]. Dla liczby złożonej z k cyfr to n ­ 10k−1. Badanie wymagałoby 10k−1 − 2
działań. Jak widzimy liczba dzieleń wzrasta wykładniczo do wzrostu długości liczby n.
Warto wspomnieć, że sito Eratostenesa jest jeszcze gorsze. Wykonuje on wykładniczą
liczbę operacji, wykorzystuje on także pamięć wykładniczo.
Rysunek 1: Vaughan Robert Pratt
W 1975 roku Vaughan Robert Pratt stwierdził, że problem pierwszości należy do klasy
NP. Klasę NP tłumaczy się efektywniej przez wprowadzenie definicji klasy P.
1
Definicja 2 Klasa P – rodzina problemów, których rozwiązanie wyliczamy w czasie wielomianowym.
Tym samym
Definicja 3 Klasa NP – rodzina problemów, których rozwiązanie wyliczane jest algorytmem o czasie wykładniczym, zaś sprawdzenie poprawności wyniku – w czasie wielomianowym.
Formalna deficicja klasy NP: Jeżeli problem A należy do klasy NP oraz istnieje wielomian
ω i wielomianowy problem B takie, że:
m ∈ A ⇔ ∃k r(k) ¬ ω(r(m)) ∧ < m, k >∈ B gdzie r(m) – rozmiar liczby m. Problemy „bardziej skomplikowane” nie należą do klasy NP – to znaczy te problemy, których
rozwiązanie jest bardziej szczegółowe od „tak” lub „nie” (np. znalezienie dzielników).
Informatycy badają czy klasa problemów P jest równoważna klasie NP. Wystarczyłoby wskazać jedynie, że każdy problem z klasy NP da się rozwikłać algorytmem z klasy P.
Mimo starań większośc informatyków jest zdania, że P 6= NP .
Do dalszych rozważań potrzebować będziemy potrzebowali definicji pierwiastka pierwotnego:
Definicja 4 Pierwiastek pierwotny modulo n – liczba z przedziału < 1, n − 1 >, której
potęgi modulo n dają wszystkie liczby z < 1, n − 1 >.
Przykład 1 Podnieśmy 2 do kolejnych potęg modulo 5:
21 (mod 5) = 2
22 (mod 5) = 4
23 (mod 5) = 3
24 (mod 5) = 1
Liczba 2 jest pierwiastkiem pierwotnym modulo 5.
Zaś:
Przykład 2 Sprawdźmy czy 2 jest pierwiastkiem pierwotnym modulo 7:
21 (mod 7) = 2
22 (mod 7) = 4
23 (mod 7) = 1
24 (mod 7) = 2
25 (mod 7) = 4
26 (mod 7) = 1
...
Jak widzimy 2 nie jest już pierwiastekiem pierwotnym modulo 7.
2
Zachodzi
Twierdzenie 1 Liczba naturalna m > 1 jest pierwsza wtedy i tylko wtedy, gdy w Zm
istnieje pierwiastek pierwotny modulo m.
Zatem możemy dość sprawnie decydować czy dana liczba jest pierwsza czy złożona sprawdzając tylko czy istnieje pierwiastek pierwotny. Badaniem czy a jest pierwiastkiem pierwotnym modulo m zajmuje się test Lucasa, który sprawdza:
• czy am−1 ≡ 1 (mod m) oraz
• czy ∀q | (m − 1) q ∈ P a
m−1
q
6≡ 1
(mod m)
Definicja 5 Certyfikatem pierwszości liczby n nazywamy ciąg danych świadczących o
pierwszości liczby n.
Test Lucassa pokazuje, że certyfikatem liczby n może być ciąg danych złożony z pierwiastka pierwotnego modulo n oraz wszystkich dzielników liczby n − 1. Nie jest to jednak
najlepszy certyfikat, gdyż powinien on obejmować test pierwszości dzielników.
Pratt zauważył, że jeżeli niepełny certyfikat Lucasa uzupełnimy o niepełne certyfikaty
pierwszości wymionionych w nim liczb pierwszych, a także o niepełne certyfikaty liczb
pierwszych w dołączonych certyfikatach itd., to cerrtyfikat pierwszości stanie się pełny.
Rysunek 2: Leonard Adleman
Przykład 3 Certyfikatem pierwszości liczby 23 jest:
(5, 2, 11(2, 2, 5(3, 2))), gdyż 5 jest pierwiastkiem pierwotnym modulo 23, 22 = 2 ∗ 11. 2 jest
liczbą pierwszą z definicji. 2 jest pierwiastkiem pierwotnym modulo 11 oraz 10 = 2 ∗ 5.
Analogicznie 3 jest pierwiastkiem pierwotnym modulo 5, a 4 = 22 .
Inne algorytmy badające pierwszość:
1976 rok Gary Miller
przedstawił test pierwszości w oparciu o hipotezę Riemanna, który został odrzucony
1983 rok Adleman,
podali I deterministyczny test pierwszości, który nie jest
Pomerance,
wykładniczy, ale nie jest też jeszcze wielomianowy
Rumeley
2002 rok Manindra
podali deterministyczny, wielomianowy test pierwszości
Agraval wraz
z uczniami
3
Rysunek 3: Manindra Aragraval
Twierdzenie 2 (M. Agravala) Przyjmijmy, że liczby naturalne m i a są względnie
pierwsze. Liczba m jest pierwsza wtedy i tylko wtedy, gdy wielomian (x − a)m o współczynikach z pierścienia reszt modulo m jest równy wielomianowi xm − a.
Autorom testu kłopty sprawiło wykazanie wielomianowości algorytmu. Ostatecznie pokazali, że dla liczb o rozmiarze n algorytm wykonuje conajwyżej c ∗ n12 operacji dla pewnego
c = const. Ciężko jest znaleźć jednak zastosowanie praktyczne wyniku prac Agravala.
Wykorzystanie algorytmów probabilistycznych wymaga zupełnie innego sposobu myślenia – otrzymujemy odpowiedź „nie” lub „najprawdopodobniej tak”. Taka rodzina algorytmów jest bardzo szybka, jednak za cenę możliwliwości popełnienia błędu. Michael Rabin
w 1980 roku podał jeden z najbardziej znanych losowych testów pierwości.
Rysunek 4: Michael O. Rabin
4
Micheal Oser Rabin urodził się w 1931 roku w Breslau w Niemczech
(dzisiejszy Wrocław). Przed ukończeniem ósmego roku życia przeniósł się
do Palestyny. W 1953 roku ukończył studia matematyczne na Uniwersytecie Hebrajskim w Jerozolie.
Rabin brał udział w kreowaniu teorii złożoności obliczeniowej. Kształtował pojęcie klasy NP. W 1976 roku został za to uhonorowany wraz z
Dana Scott nagrodą Turinga. Osiągnięcia ma również w kryptografii.
Michael Rabin otrzymał tytuł doktor honoris causa na wielu uniwersytetach, także na Uniwersytecie Wrocławskim. Uroczyste nadanie tytułu
odbyło się 13 lipca 2007 roku.
Rozważmy test Fermata (dla danej liczby m):
• wylosujmy a < m i sprawdźmy czy am−1 ≡ 1 (mod m)
• jeśli tak −→ m prawdopodobnie jest liczbą pierwszą,
jeśli nie −→ m jest liczbą złożoną
Algorytm ten jest algorytmem Monte Carlo.
Definicja 6 Algorytmy Monte Carlo – rodzina algorytów probabilistycznych, których prawdopodobieństwo błędu jest mniejsze od c = const, takiej że c < 1.
Przy wielokrotnym powtarzaniu algorytmu M-C prawdopodobieństwo błędu dąży do 0.
Twierdzenie 3 Liczba Carmichaela – Liczba naturalna n jest liczbą Carmichaela wtedy
i tylko wtedy, gdy:
1. n jest liczbą złożoną,
2. ∀a ∈ N 1 < a < n a 6| n,
liczba (an−1 − 1) jest podzielna przez n.
Rozważmy liczbę Carmichaela m = p ∗ q ∗ r. Istnieje (p − 1) ∗ (q − 1) ∗ (r − 1) liczb względnie pierwszych z m, zatem prawdopodobieństwo błędu P ¬ (p−1)∗(q−1)∗(r−1)
. Ze wzrostem
p∗q∗r−1
liczb p, q oraz r P → 1, zatem test Fermata nie jest algorytm Monte Carlo.
Twierdzenie Fermata musimy uzupełnić o informacje o liczbach pierwszych. Gary Miller w algorytmie skorzystł z:
Twierdzenie 4 Jeżeli m jest liczbą pierwszą, to każda liczba x, której kwadrat przystaje
do 1, przystaje modulo m do −1, albo do 1.
Każdy zna to twierdzenie z rozwiązania równania x2 = 1 ⇒ x = −1 ∨ x = 1.
W dalszych rozważaniach potrzebne nam będzie:
Twierdzenie 5 Jeżeli
• ∀a
0 < a < m ∧ a 6| m
• x2 ≡ 1
am−1 ≡ 1
(mod m), oraz
(mod m) tylko dla x ≡ 1 (mod m) ∨ x ≡ −1
5
(mod m),
to m jest liczbą pierwszą.
Połączmy to twierdzenie z poprzednim oraz z twierdzeniem Fermata. Liczba a świadczy
o pierwszości m, jeżeli:
an ≡ 1
i
(mod m), lub
a2 ∗n ≡ −1
(mod m), i ∈ N, i < k.
Pojęcie świadczenia o pierwszości pozwala na wprowadzenie twierdzenia:
Twierdzenie 6 Liczba m jest pierwsza wtedy i tylko wtedy, gdy każda dodatnia liczba
a < m świadczy o pierwszości m.
Michael Rabin zaproponował na bazie powyższego twierdzenia test pierwszości m:
• wylosuj a ∈ N 0 < a < m i sprawdź, czy świadczy o pierwszości m,
• jeżeli świadczy, to przekaż, że m jest prawdopodobnie liczbą pierwszą, w przeciwnym
razie przekaż, że m jest liczbą złożoną.
Algorytm Rabina popełnia błąd najwyżej z prawdopodobieństwem 21 , zatem jest to algorytm Monte Carlo. Jeżeli m jest liczbą złożoną to najwyżej 41 liczb świadczy o pierwszości
m (oczywiście mniejszych od m). Zatem prawdopodobieństwo błędu spada dwukrotnie.
Po t-krotnym powtarzaniu testu Rabina otrzymamy prawdopodobieństwo błędu nie przekroczy 41t .
6
Download