Das Bestimmen der Quadratwurzel kann man im Körper recht effizient mit dem TONELLI-SHANKS Algorithmus erledigen. Bevor man aber dazu übergehen kann den Algorithmus zu erläutern, muß man sich unbedingt über einige Fakten in Bezug auf das Quadrieren von Körperelementen klar werden. Ohne wesentlich an Allgemeinheit zu verlieren, betrachten wird dazu die multiplikative Gruppe und formulieren zuerst die folgenden Grundaussagen in Bezug auf:60
| (4.19) |
| (4.20) |
Für einen kurzen Beweis nehmen wir uns ein bestimmtes (konstantes) Element heraus und betrachten die Zerlegung , welche es in immer geben muß: . Wenn man nun für alle möglichen Werte setzt, dann muß auch entsprechend variieren. Wegen:
in wird einerseits alle möglichen Werte annehmen und andererseits wird jedes Produkt insofern doppelt vorkommen, daß und nur die Rolle getauscht haben. In Abbildung 4.1 sind mögliche Produkte für (hat keine Wurzel) und (Wurzeln sind ) beispielhaft in dargestellt (wobei gestrichelte Linien Produkte kennzeichnen, bei denen und nur die Rolle getauscht haben).
Multiplizieren wir alle Produkte miteinander und schließen dabei die Doppelungen aus (d. h. berücksichtigen nur die Produkte in Abbildung 4.1a, welche mit durchgezogenen Linien dargestellt sind), dann hat man alle Elemente miteinander multipliziert.
Bei den Produkten handelt es sich aber genau um die Potenz
und so kann man mit dem Satz von WILSON (siehe Formel 3.7) den Beweis abschließen:
Noch bevor man also versucht die Quadratwurzel zu berechnen, kann man mit Hilfe des gerade eingeführten (EULER-) Kriteriums prüfen, ob diese überhaupt existiert. Die Nomenklatur für das EULER-Kriterium stammt allerdings von A.-M. LEGENDRE und wird als LEGENDRE-Symbol bezeichnet:
Im speziellen Fall kann man eine sehr einfache Lösung für die Quadratwurzel erhalten, sofern sie denn existiert [Ros99, Theorem 9.3], [ANS05, D.1.4]:
| (4.22) |
mit .
Ausgangspunkt für einen kurzen Beweis könnte die folgende Darstellung für das Modul sein:62
Wird sie im Zusammenhang mit dem EULER-Kriterium von Gleichung 4.19 angewendet, dann bestätigt sich Formel 4.22 wiefolgt:
Idee Der TONELLI-SHANKS Algorithmus nach [Ton91, Sha73] reduziert, ausgehend von einem Anfangswert , den Exponenten im Ausdruck
| (4.23) |
immer weiter, bis schließlich wird und deshalb die gesuchte Lösung darstellt (siehe z. B. auch [NZM91, 2.9], [CP05, 2.3.2]). Mit soll es sich aber nicht um irgendeine Zweierpotenz handeln, sondern um die Ordnung des Elements .
Es gilt also einen Algorithmus zu beschreiben, bei dem sowohl für den Startwert als auch für alle Werte in
| (4.24) |
die Ordnung einerseits (und überhaupt) eine Zweierpotenz ist und andererseits (auch noch) abnimmt.63
Startwerte Als Anfangswerte setzt man:
Dabei entspricht der Wert nicht zwingendermaßen der Ordnung , er befriedigt aber Kongruenz 4.24 grundsätzlich:
| (4.25) |
setzen (mit , maximal) und erhält so:
| (4.26) |
Interpretieren wir Kongruenz 4.26 jetzt mit dem Wissen aus Abschnitt 2.1.2, dann muß es sich bei entweder um die Ordnung selbst oder aber um ein Vielfaches davon handeln: . Deshalb können und nur Zweierpotenzen sein (was nicht ausschließt), d. h. für die Ordnung kann man ohne weitere Bedenken ansetzen (mit ). Um nun aus den exakten Exponenten bzw. die Ordnung zu ermitteln, kann man einfach so oft quadrieren bis (nach FERMAT’s kleinem Satz) die Bedingung erfüllt ist.
Iteration Bevor wir zum iterativen Teil des Algorithmus übergehen können, benötigen wir noch die Mithilfe irgendeines (zufällig gewählten) Elements , welches keine Wurzel in haben darf. Für muß das EULER-Kriterium 4.21 dann den Wert
annehmen. Aus diesem Element erzeugen wir ein neues Element mit den Eigenschaften:
| (4.27) |
Nun wird die Näherung schrittweise nach folgender Vorschrift verbessert:64
wobei sich der Exponent jeweils um verringert (, mit einem mglw. Vielfachen der Ordnung ).
Um die Verringerung des Exponenten nachzuweisen bilden wir einfach mit Hilfe von Iterationsformel 4.28:
Beide Faktoren auf der rechten Seite sind aber vom Wert , was letztlich
bedeutet. Zur Begründung folgende Argumentation:
welche ja bei jeder Iteration als vorausgesetzt wird. Aus diesem Grund kann der Wert innerhalb des Klammerausdrucks nur oder sein [NZM91, Hilfssatz 2.10]. Wenn aber die Ordnung von derstellt, dann muß der kleinste Wert sein, welcher zu führt. Deshalb kann nicht (ebenfalls) die Ordnung von sein und es bleibt nur die Schlußfolgerung: .
Aus dem letzten Punkt ergibt sich die Notwendigkeit, daß man am Anfang des Iterationszyklus jedesmal die exakte Ordnung bzw. den zugehörigen Exponenten bestimmt (vgl. auch die Erläuterungen zu den Startwerten).
Algorithmus Bevor wir in Algorithmus 7 alle Erkenntnisse zusammenfassen, noch zwei Hinweise zur Umsetzung:
ein, dann kann man auch rekursiv berechnen:
Um den korrekten Startwert zu erzielen, vergleichen wir jetzt noch die Werte für :
und erhalten: