Jak wyciągnąć modulo
Niech będzie liczbą nieparzystą...
Pytamy, czy istnieje taka liczba całkowita że
(1) |
Jeśli ta kongruencja ma rozwiązanie całkowite to na pewno istnieje rozwiązanie Wtedy liczba też jest rozwiązaniem. Jak jednak rozstrzygnąć, czy kongruencja (1) w ogóle ma rozwiązania?
W przypadku, gdy jest liczbą pierwszą, dysponujemy praktycznym algorytmem, który rozstrzyga, czy kongruencja (1) ma rozwiązanie - oparty jest on na tzw. kryterium Eulera. Jest ono ściśle związane z małym twierdzeniem Fermata. To słynne twierdzenie mówi, że jeśli nie dzieli się przez liczbę pierwszą to wówczas
Jeśli kongruencja (1) ma rozwiązanie to możemy napisać
a zatem ostatecznie
(2) |
Kryterium Eulera stanowi, że powyższe rozumowanie można odwrócić: jeśli zachodzi kongruencja (2), to kongruencja (1) ma rozwiązanie. Warto w tym miejscu dodać, że potęgowanie modulo łatwo wykonać efektywnie nawet wtedy, gdy liczby oraz są ogromne! Oto zarys metody. Najpierw zapisujemy wykładnik w układzie dwójkowym:
Ponieważ
więc wystarczy wykonać kolejnych podnoszeń do kwadratu, a na koniec mnożeń - wszystkie operacje wykonujemy modulo a więc na liczbach mniejszych od
Załóżmy teraz, że liczba przeszła test Eulera. Nasuwa się teraz pytanie: jak znaleźć spełniające kongruencję (1)?
Jeśli to wystarczy przyjąć
Pokazuje to poniższy rachunek
(na mocy (2)).
Jeżeli natomiast to nieco komplikując powyższą metodę (szczegóły pominiemy), można obliczyć spełniające (1), o ile mamy do dyspozycji taką liczbę że kongruencja
(3) |
nie ma rozwiązań. Taką liczbę nazywamy nieresztą kwadratową modulo . Łatwo udowodnić, że w ciągu liczb jest dokładnie niereszt. Dla pozostałych liczb z powyższego ciągu kongruencja (3) ma rozwiązanie - nazywamy je resztami kwadratowymi modulo . I tak np. dla liczby są resztami kwadratowymi, a liczby nieresztami kwadratowymi. Natomiast dla niereszty kwadratowe to a reszty kwadratowe to Nieresztę kwadratową której używamy we wzmiankowanym powyżej algorytmie pierwiastkowania modulo łatwo znaleźć praktycznie nawet dla bardzo dużych liczb pierwszych Wystarczy mianowicie wylosować liczbę i sprawdzić, czy jest nieresztą kwadratową, stosując, na przykład, kryterium Eulera. W przypadku niepowodzenia losujemy i testujemy inną liczbę Prawdopodobieństwo wylosowania niereszty w każdej próbie wynosi a zatem przeciętnie bardzo szybko znajdziemy nieresztę. Jest to przykład algorytmu zrandomizowanego. Rzucając razy symetryczną monetą, możemy, oczywiście, wyrzucić same reszty (niektórzy mówią reszki), ale prawdopodobieństwo tego jest małe.
A może lepiej testować po kolei liczby aż do skutku, czyli do napotkania niereszty? Niech więc oznacza najmniejszą nieresztę kwadratową modulo Najlepszy wynik bezwarunkowy pochodzi od D.A. Burgessa
dla każdego i Natomiast przy założeniu uogólnionej hipotezy Riemanna N.C. Ankeny pokazał oszacowanie znacznie lepsze
Tak więc prymitywny algorytm testowania kolejnych liczb jest (warunkowo) bardzo efektywny.
Podsumujmy nasze dotychczasowe rozważania: jeśli moduł jest liczbą pierwszą, to w zasadzie potrafimy poradzić sobie zarówno z rozstrzygnięciem, czy jest resztą kwadratową modulo jak i ze znalezieniem wszystkich rozwiązań kongruencji (1) w zbiorze (są dwa takie rozwiązania).
A jak jest dla liczb złożonych Rozpatrzymy najprostszy przypadek, gdy jest iloczynem dwóch różnych liczb pierwszych. Do dzisiaj nie jest znana żadna efektywna uniwersalna metoda rozstrzygania, czy kongruencja (1) ma rozwiązanie. Załóżmy jednak, że dobra wróżka rzekła: Tak, kongruencja jest rozwiązalna, a Twoje zadanie to znaleźć jej wszystkie rozwiązania w zbiorze . Załóżmy dalej, że jakimś cudem wypisaliśmy wszystkie (cztery - wynika to z chińskiego twierdzenia o resztach) rozwiązania kongruencji (1):
Ponieważ kongruencja ma dokładnie dwa rozwiązania w zbiorze więc dla pewnych mamy a zatem liczba dzieli się przez Oczywiście, nie dzieli się przez gdyż A zatem
Liczby NWD NWD NWD potrafimy obliczyć, bardzo efektywnie stosując najsłynniejszy algorytm na świecie - algorytm Euklidesa. W ten sposób znaleźliśmy nietrywialny dzielnik liczby Najbardziej pomógł nam cud (a nie wróżka). Tym samym naszkicowaliśmy główną myśl dowodu twierdzenia, że kompletne rozwiązanie kongruencji (1) dla modułu złożonego jest co najmniej tak trudne, jak rozkład na czynniki pierwsze. Natomiast samo tylko rozstrzygnięcie, czy (1) ma rozwiązanie, wydaje się istotnie łatwiejsze niż rozkład na czynniki, ale jak już wspomnieliśmy wcześniej, nikt nie umie zrobić efektywnie nawet tego.