A Tonelli-Shanks algoritmus (Shanks RESSOL algoritmusnak nevezte) a moduláris aritmetikához tartozik, és összehasonlítások megoldására szolgál.
ahol a másodfokú maradék modulo , és egy páratlan prímszám .
A Tonelli-Shanks algoritmus nem használható összetett modulokhoz; négyzetgyökök keresése modulo kompozit számításilag egyenértékű a faktorizációval [1] .
Ennek az algoritmusnak egy egyenértékű, de valamivel bonyolultabb változatát Alberto Tonelli fejlesztette ki 1891-ben. Az itt tárgyalt algoritmus verzióját Daniel Shanks önállóan fejlesztette ki 1973-ban.
Bemeneti adatok : — páratlan prímszám, — egész szám , amely egy négyzetes maradék modulo , más szóval , ahol a Legendre szimbólum .
Az algoritmus eredménye : olyan maradék , amely kielégíti az összehasonlítást .
Az összehasonlító megoldás megtalálása után a második összehasonlító megoldást a következőképpen találjuk meg .
Tegyünk egy összehasonlítást . páratlan, és mivel , 10 egy másodfokú maradék az Euler-kritérium szerint .
Mivel nyilvánvalóan innen 2 összehasonlító megoldást kapunk.
Hadd . Most pedig jegyezd meg . Az utolsó összehasonlítás igaz marad az algoritmus fő hurkának minden iterációja után. Ha egy ponton , akkor az algoritmus a -val fejeződik be .
Ha , akkor vegyük figyelembe a másodfokú nem-maradék modulo . Legyen , majd és , ami azt mutatja, hogy a sorrend .
Hasonlóképpen azt kapjuk, hogy , tehát a sorrend osztódik , tehát a sorrend . Mivel egy négyzet modulo , akkor ez is négyzet, ami azt jelenti, hogy .
Tegyük fel, hogy és , és . A korábbiakhoz hasonlóan megőrzik; azonban ebben a konstrukcióban mindkét és rendje van . Ebből következik a sorrend , ahol .
Ha , akkor , és az algoritmus leáll, visszatérve . Ellenkező esetben hasonló definíciókkal indítjuk újra a ciklust, amíg 0-t nem kapunk. Mivel a természetesek sorozata szigorúan csökken, az algoritmus véget ér.
A Tonelli-Shanks algoritmus átlagosan teljesít (minden lehetséges bemeneten (négyzetes maradékok és nem maradékok))
modulo szorzások, ahol a számjegyek száma a bináris reprezentációban , és az egyesek száma a bináris reprezentációban . Ha a szükséges másodfokú nem-maradékot úgy számítjuk ki, hogy egy véletlenszerűen kiválasztott nem-maradékot másodlagos nem-maradékról van szó, akkor ehhez átlagosan két Legendre szimbólum kiszámítása szükséges [2] . A kiszámított Legendre szimbólumok átlagos számaként kettőt a következőképpen magyarázzuk: annak a valószínűsége, hogy négyzetes maradékról van szó - a valószínűsége nagyobb, mint a fele, így átlagosan körülbelül két ellenőrzésre lesz szükség, hogy másodfokú maradékról van-e szó.
Ez azt mutatja, hogy a gyakorlatban a Tonelli-Shanks algoritmus nagyon jól fog működni, ha a modulus véletlenszerű, vagyis ha nem különösebben nagy a bináris reprezentáció számjegyeinek számához képest . A Cipolla algoritmus akkor és csak akkor teljesít jobban, mint a Tonelli-Shanks algoritmus . Ha azonban ehelyett Sutherland algoritmusát használjuk a diszkrét logaritmus végrehajtására a 2- Sylow alcsoporton , ez lehetővé teszi, hogy a kifejezésben a szorzások számát egy aszimptotikusan korlátos értékkel helyettesítsük [3] . Valóban, elég találni egy olyat, amely még akkor is kielégít (megjegyzendő, hogy ez 2 többszöröse, mivel ez egy másodfokú maradék).
Az algoritmus megköveteli egy másodfokú nem maradékot . Jelenleg nincs olyan determinisztikus algoritmus , amely a hosszúságú polinomidőben megtalálná ezt . Ha azonban igaz az általánosított Riemann-hipotézis , akkor van egy négyzetes nem-maradék , [4] , amelyet könnyű megtalálni a polinomidőben megadott határokon belüli ellenőrzéssel . Ez természetesen a legrosszabb eset becslése, mivel, mint fentebb látható, elegendő átlagosan 2 véletlenszerű ellenőrzést ellenőrizni, hogy négyzetes nem-maradékot találjunk.
A Tonelli-Shanks algoritmus használható egy maradékmező feletti elliptikus görbén lévő pontok keresésére . Használható számításokhoz a Rabin kriptorendszerben is .
A Tonelli-Shanks algoritmus általánosítható tetszőleges ciklikus csoportra (a helyett ) és egy tetszőleges természetes th-edik fok gyökeinek megtalálására , különösen a th-edik fok gyökeinek kiszámítására egy véges mezőben [5] .
Ha ugyanabban a ciklikus csoportban sok és nem túl nagy négyzetgyök van, akkor az algoritmus javítása és egyszerűsítése, valamint sebességének növelése érdekében az elemek négyzetgyökeinek táblázata elkészíthető a következőképpen:
Számelméleti algoritmusok | |
---|---|
Egyszerűség tesztek | |
Prímszámok keresése | |
Faktorizáció | |
Diszkrét logaritmus | |
GCD keresése | |
Modulo aritmetika | |
Számok szorzása és osztása | |
A négyzetgyök kiszámítása |