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: