Algoritmul Tonelli-Shanks (numit algoritmul RESSOL de către Shanks) aparține aritmeticii modulare și este folosit pentru a rezolva comparații
unde este restul patratic modulo și este un număr prim impar .
Algoritmul Tonelli-Shanks nu poate fi utilizat pentru module compuse; căutarea rădăcinilor pătrate modulo compozit este echivalentă din punct de vedere computațional cu factorizarea [1] .
O versiune echivalentă, dar puțin mai complicată a acestui algoritm a fost dezvoltată de Alberto Tonelli în 1891. Versiunea algoritmului discutată aici a fost dezvoltată independent de Daniel Shanks în 1973.
Date de intrare : — un număr prim impar, — un număr întreg care este un rest patratic modulo , cu alte cuvinte, , unde este simbolul Legendre .
Rezultatul algoritmului : un reziduu care satisface comparația .
După găsirea soluției de comparație, a doua soluție de comparație se găsește ca .
Să facem o comparație . este impar și, deoarece , 10 este un reziduu pătratic după criteriul lui Euler .
Deoarece , evident , de aici obținem 2 soluții de comparație.
Lasă . Acum și , rețineți că . Ultima comparație rămâne adevărată după fiecare iterație a buclei principale a algoritmului. Dacă la un moment dat , atunci algoritmul se termină cu .
Dacă , atunci luați în considerare modul pătratic nereziduu . Fie , apoi și , ceea ce arată că ordinea este .
În mod similar, obținem că , deci ordinea se împarte , deci ordinea este . Deoarece este un pătrat modulo , atunci este și un pătrat, ceea ce înseamnă că .
Să presupunem că și , și . Ca și înainte, se păstrează; cu toate acestea, în această construcție , ambele și au ordine . Rezultă că are ordinea , unde .
Dacă , atunci , iar algoritmul se oprește, revenind . În caz contrar, repornim bucla cu definiții similare până când obținem , care este egal cu 0. Deoarece secvența de naturale este strict descrescătoare, algoritmul se termină.
Algoritmul Tonelli-Shanks funcționează în medie (peste toate intrările posibile (reziduuri pătratice și nereziduuri))
înmulțiri modulo, unde este numărul de cifre din reprezentarea binară și este numărul de cifre din reprezentarea binară . Dacă nereziduul patratic necesar este calculat prin verificarea unuia ales aleatoriu pentru a stabili dacă este un non-reziduu pătratic, atunci în medie acest lucru necesită calcularea a două simboluri Legendre [2] . Doi ca număr mediu de simboluri Legendre calculate este explicat după cum urmează: probabilitatea ca acesta să fie un reziduu pătratic este - probabilitatea este mai mare de jumătate, deci, în medie, vor fi necesare aproximativ două verificări dacă este un reziduu pătratic.
Acest lucru arată că, în practică, algoritmul Tonelli-Shanks va funcționa foarte bine dacă modulul este aleatoriu, adică atunci când nu este deosebit de mare în raport cu numărul de cifre din reprezentarea binară . Algoritmul Cipolla are performanțe mai bune decât algoritmul Tonelli-Shanks dacă și numai dacă . Totuși, dacă în schimb algoritmul lui Sutherland este folosit pentru a efectua logaritmul discret pe subgrupul 2- Sylow al lui , acest lucru permite ca numărul de înmulțiri din expresie să fie înlocuit cu o valoare mărginită asimptotic [3] . Într-adevăr, este suficient să găsiți unul care să satisfacă chiar și atunci (rețineți că este un multiplu de 2, deoarece este un reziduu patratic).
Algoritmul necesită găsirea unui non-reziduu pătratic . În momentul de față, nu există un algoritm determinist , care să găsească astfel de , în timp polinomial de lungime . Totuși, dacă ipoteza Riemann generalizată este adevărată, atunci există un non-rezidu pătratic , [4] , care este ușor de găsit verificând în limitele specificate în timp polinomial . Aceasta este, desigur, o estimare în cel mai rău caz, deoarece, așa cum se arată mai sus, este suficient să verificați în medie 2 dintre ele aleatorii pentru a găsi un non-rezidu pătratic.
Algoritmul Tonelli-Shanks poate fi folosit pentru a găsi puncte pe o curbă eliptică peste un câmp de reziduuri . Poate fi folosit și pentru calcule în criptosistemul Rabin .
Algoritmul Tonelli-Shanks poate fi generalizat la orice grup ciclic (în loc de ) și la găsirea rădăcinilor de gradul al treilea pentru un natural arbitrar , în special, la calcularea rădăcinilor gradului al treilea într-un câmp finit [5] .
Dacă sunt multe rădăcini pătrate de calculat în același grup ciclic și nu foarte mari, pentru a îmbunătăți și simplifica algoritmul și a crește viteza acestuia, se poate pregăti un tabel cu rădăcini pătrate ale pătratelor elementelor astfel:
Algoritmi teoretici numerelor | |
---|---|
Teste de simplitate | |
Găsirea numerelor prime | |
Factorizarea | |
Logaritm discret | |
Găsirea GCD | |
Modul de aritmetică | |
Înmulțirea și împărțirea numerelor | |
Calcularea rădăcinii pătrate |