Algoritmus Tonelli-Shanks (Shanksem nazývaný algoritmus RESSOL) patří k modulární aritmetice a používá se k řešení porovnávání .
kde je kvadratický zbytek modulo a je liché prvočíslo .
Algoritmus Tonelli-Shanks nelze použít pro složené moduly; hledání odmocnin modulo kompozit je výpočetně ekvivalentní faktorizaci [1] .
Ekvivalentní, ale o něco složitější verzi tohoto algoritmu vyvinul Alberto Tonelli v roce 1891. Zde popsaná verze algoritmu byla vyvinuta nezávisle Danielem Shanksem v roce 1973.
Vstupní data : — liché prvočíslo, — celé číslo , které je kvadratickým zbytkem modulo , jinými slovy , kde je Legendreův symbol .
Výsledek algoritmu : zbytek , který vyhovuje srovnání .
Po nalezení srovnávacího řešení je druhé srovnávací řešení nalezeno jako .
Udělejme srovnání . je liché, a protože , 10 je kvadratický zbytek podle Eulerova kritéria .
Vzhledem k tomu , samozřejmě , odtud dostáváme 2 řešení porovnání.
Nechte _ Nechte nyní a , všimněte si toho . Poslední srovnání zůstává pravdivé po každé iteraci hlavní smyčky algoritmu. Pokud v určitém okamžiku , pak algoritmus skončí s .
Jestliže , pak zvažte kvadratický nezbytkový modulo . Nechť , pak a , což ukazuje, že pořadí je .
Podobně dostaneme, že , takže pořadí se dělí , takže pořadí je . Protože je čtverec modulo , pak je to také čtverec, což znamená, že .
Předpokládejme, že a , a . Stejně jako dříve je zachována; však v této konstrukci , oba a mají pořádek . Z toho vyplývá, že má pořadí , kde .
Pokud , potom , a algoritmus se zastaví, vrátí se . V opačném případě restartujeme smyčku s podobnými definicemi , dokud nedostaneme , která se rovná 0. Protože posloupnost přirozených je přísně klesající, algoritmus skončí.
Algoritmus Tonelli-Shanks funguje v průměru (přes všechny možné vstupy (kvadratické zbytky a nezbytky))
modulo násobení, kde je počet číslic v binární reprezentaci a je počet jedniček v binární reprezentaci . Pokud se požadované kvadratické nezbytky vypočítávají kontrolou náhodně vybraného , zda se jedná o kvadratické nezbytky, pak to v průměru vyžaduje výpočet dvou Legendreových symbolů [2] . Dva jako průměrný počet vypočítaných Legendreových symbolů se vysvětluje následovně: pravděpodobnost, že se jedná o kvadratický zbytek je - pravděpodobnost je větší než poloviční, takže v průměru zabere asi dvě kontroly, zda se jedná o kvadratický zbytek.
To ukazuje, že v praxi bude Tonelli-Shanksův algoritmus fungovat velmi dobře, pokud je modul náhodný, to znamená, když není příliš velký vzhledem k počtu číslic v binární reprezentaci . Algoritmus Cipolla funguje lépe než algoritmus Tonelli-Shanks tehdy a jen tehdy, když . Pokud se však místo toho použije Sutherlandův algoritmus k provedení diskrétního logaritmu na 2- Sylow podskupině , umožňuje to nahradit počet násobení ve výrazu asymptoticky omezenou hodnotou [3] . Ve skutečnosti stačí najít takový, který vyhovuje i tehdy (všimněte si, že je to násobek 2, protože je kvadratický zbytek).
Algoritmus vyžaduje nalezení kvadratického non-rezidua . V tuto chvíli neexistuje žádný deterministický algoritmus , který by takové našel v polynomiálním čase délky . Je-li však zobecněná Riemannova hypotéza pravdivá, pak existuje kvadratický nezbytek , [4] , který lze snadno najít kontrolou ve specifikovaných mezích v polynomiálním čase . Toto je samozřejmě odhad nejhoršího případu, protože, jak je uvedeno výše, stačí zkontrolovat průměrně 2 náhodné, aby se našel kvadratický zbytek.
Algoritmus Tonelli-Shanks lze použít k nalezení bodů na eliptické křivce nad polem zbytků . Může být také použit pro výpočty v Rabinově kryptosystému .
Tonelli-Shanksův algoritmus lze zobecnit na libovolnou cyklickou grupu (místo ) a na hledání kořenů tého stupně pro libovolný přirozený , zejména na výpočet kořenů tého stupně v konečném poli [5] .
Pokud je ve stejné cyklické skupině mnoho odmocnin, které je třeba vypočítat a nejsou příliš velké, lze pro zlepšení a zjednodušení algoritmu a zvýšení jeho rychlosti připravit tabulku druhých odmocnin druhých mocnin prvků takto:
Číselné teoretické algoritmy | |
---|---|
Testy jednoduchosti | |
Hledání prvočísel | |
Faktorizace | |
Diskrétní logaritmus | |
Hledání GCD | |
Modulová aritmetika | |
Násobení a dělení čísel | |
Výpočet druhé odmocniny |