Test Millera-Rabina
Z Wikipedii
Test Millera-Rabina jest testem pierwszości, czyli algorytmem określającym czy dana liczba jest pierwsza. Podobnie jak test Fermata i test Solovay-Strassena jest testem probabilistycznym, wymagającym stosowania liczb losowych. Oryginalna wersja tego algorytmu (Millera) została zaprojektowana jako algorytm deterministyczny, jednak jej poprawność zależy od nieudowodnionej dotychczas uogólnionej hipotezy Riemanna. Michael O. Rabin zmodyfikował ten algorytm do postaci randomizacyjnej i dowiódł jego poprawności w tej postaci.
[edytuj] Algorytm i czas działania
Algorytm można zapisać w następującej postaci:
- Wejście: n > 1: nieparzysta liczba natualna do przetestowania; k: parametr określający dokładność testu
- Wyjście: złożona jeśli n jest złożona, prawdopodobnie pierwsza jeśli nie uda się stwierdzić złożoności
- wylicz maksymalną potęgę dwójki dzielącą n − 1 i przedstaw n − 1 jako ;
- powtórz k razy:
- wybierz a losowo z przedziału [ ]
- jeśli i dla wszystkich r z przedziału [], zwróć wynik złożona
- zwróć wynik prawdopodobnie pierwsza
Używając algorytmu szybkiego potęgowania możemy tę procedurę przeprowadzić w czasie O(k × log3 n), gdzie k jest liczbą różnych wartości a które testujemy.
[edytuj] Dokładność testu i wersje deterministyczne
Można pokazać że dla dowolnej złożonej nieparzystej liczby naturalnej n co najmniej 3/4 możliwych wartości a jest dobrymi świadkami złożoności tej liczby. Jeśli zatem przeprowadzamy k losowych prób, prawdopodobieństwo że określimy liczbę złożoną jako pierwszą wynosi co najwyżej 4 − k.
Istnieją deterministyczne wersje tego testu, jednak w ogólności są znacznie wolniejsze od niego i nie mają zastosowania praktycznego. Dla małych n udowodniono że można test przeprowadzić znacznie szybciej:
- jeśli n < 4,759,123,141, wystarczy sprawdzić a = 2, 7 i 61,
- jeśli n < 341,550,071,728,321, wystarczy sprawdzić a = 2, 3, 5, 7, 11, 13 i 17.
(inne tego typu kryteria opisane są w [1])
Daje to bardzo szybki deterministyczny test pierwszości dla liczb z tego zakresu, bez żadnych dodatkowych założeń. Udowodniono jednak że żaden skończony zbiór a nie wystarcza do testowania wszystkich liczb złożonych.