• Keine Ergebnisse gefunden

Algorithmus von Tonelli und Shanks Algorithmus

N/A
N/A
Protected

Academic year: 2022

Aktie "Algorithmus von Tonelli und Shanks Algorithmus"

Copied!
10
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

Algorithmus von Tonelli und Shanks

Algorithmus Berechnen von Quadratwurzeln mod p EINGABE: p∈P, d mit(dp) =1

1 Sei p−1=2sq mit q ungerade.

2 Setze xdqmodp undℓ=0.

3 Wähle z modp zufällig bis(zp) = (−1). Setze g:=zq modp.

4 For j =1 to s−1

1 If((x·g)2s−1−j (−1)modp)then:=+2j.

5 Berechne adq+12 g2 modp.

AUSGABE: a mit a2d modp

Korrektheit: Folgt aus den beiden Folien zuvor.

Laufzeit: Erwartete LaufzeitO(log4p).

(2)

Algorithmus von Tonelli und Shanks

Bsp: Wir berechnen die Lösungen von y2≡2mod41.

Es gilt 41−1=23·5.

Wir setzen x ≡25=32≡ −9mod41.

Es gilt(413) = (413) = (23) = (−1).

Wir setzen g=35=81·3≡(−3)mod41.

Damit gilt g1≡(−14)mod41.

Für j =1 ist x2= (−9)2=81≡(−1)mod41, d.h.ℓ1=1.

Für j =2 ist x·g = (−9)·(−14)2≡(−1)mod41, d.h.ℓ2=1.

Damit giltℓ=6 und a≡23(−14)3≡24mod41.

Wir testen(±24)2≡2mod41.

(3)

Kettenbrüche

Definition Kettenbruch

Ein endlicher Kettenbruch ist eine Sequenz[a0, . . . ,an]mit ai∈Rund Wert[a0] :=a0und[a0, . . . ,an] := [a0, . . . ,an1+a1

n]für n∈N.

Der Wert ist eines unendlichen Kettenbruchs[a0,a1, . . .]ist definiert als limn→∞[a0, . . . ,an].

Anmerkung: Aus der Definition folgt

[a0, . . . ,an] =a0+ 1

a1+ 1

a2+...+1 an

.

Ziel: Konstruiere[a0,a1, . . .]mit a0∈Zund ai ∈Nfür i ≥1.

Bsp:

43

30 =1+1330 =1+301 13

=1+ 1

2+134 =1+ 1

2+131

4

=1+ 1

2+ 1

3+1 4

= [1,2,3,4].

1

(4)

Kettenbruchalgorithmus

Algorithmus KETTENBRUCH EINGABE: x ∈R

1 Berechne a0=⌊x⌋und t0:=xa0∈[0,1[. Setze n=0.

2 Solange tn6=0

1 Berechne

rn:= t1n >1, an+1:=⌊rn⌋ ∈Nund tn+1:=rnan+1[0,1[.

2 Setze n:=n+1.

AUSGABE: x = [a0, . . . ,an]mit a0∈Z, a1. . . ,an∈N.

Bsp: KETTENBRUCH FÜR 4330:

i ai ti ri 0 1 1330 3013 1 2 134 134 2 3 14 4

3 4 0 −

(5)

Korrektheit von K

ETTENBRUCH

Satz Korrektheit von KETTENBRUCH

Bei Terminierung liefert KETTENBRUCHbei Eingabe x ∈RAusgabe x = [a0, . . . ,an]mit a0∈Zund a1, . . . ,an∈N.

Beweis:

Wir beweisen die Invariante x = [a0, . . . ,an,rn]per Induktion.

IA für n=0: Es gilt x = [x] = [a0+t0] = [a0+r1

0] = [a0,r0].

IS nn+1: Es gilt

[x] IV= [a0, . . . ,an,rn] = [a0, . . . ,an,an+1+tn+1]

= [a0, . . . ,an,an+1+r1

n+1] = [a0, . . . ,an,an+1,rn+1].

(6)

Terminierung von K

ETTENBRUCH Satz Terminierung von KETTENBRUCH KETTENBRUCH terminiert gdw x∈Q.

Für x = pq ∈Qbenötigt KETTENBRUCHZeitO(log3(max{|p|,q})).

Beweis:

⇒: Falls KETTENBRUCH mit x = [a0,a1, . . . ,an]terminiert, so können wir x zu einem Bruch pq mit p∈Z,q∈Numformen.

⇐: Sei x = pq =: bb0

1.

Wir zeigen, dass KETTENBRUCH dieselbe Rekursion durchführt wie der Euklidische Algorithmus (EA) bei Eingabe b0,b1. EA führt die Rekursion bi =qibi+1+bi+2mit qi =⌊bbi

i+1⌋durch.

KETTENBRUCHberechnet die Rekursion ti = t1

i1ai. Für ti := bbi+2

i+1 und ai =qi folgt ti = t1

i1aibbi+2

i+1 = bbi

i+1qibi =qibi+1+bi+2.

(7)

Terminierung von K

ETTENBRUCH

Beweis: (Fortsetzung)

Wir müssen noch zeigen, dass beide Rekursionen dieselben Startwerte besitzen. Es gilt a0=⌊x⌋=⌊bb0

1⌋=q0und a1=⌊r0⌋=⌊x1

a0⌋=⌊b0 1

b1b0b1b2

⌋=⌊bb1

2⌋=q1. Ferner gilt t0=xa0= bb0

1 − ⌊bb0

1⌋= bb0

1q0= bb0

1b0bb2

1 = bb2

1 und

t1= t1

0 +a1= bb1

2q1= bb1

2b1bb3

2 = bb3

2.

EA bricht nachO(log(max{|p|,q}))Iterationen für ein bk =0 ab.

Damit ist tk2=0 und KETTENBRUCHterminiert.

D.h. auch KETTENBRUCHbenötigtO(log(max{|p|,q}))Iterationen.

KETTENBRUCHläuft damit insgesamt in ZeitO(log3(max{|p|,q})).

Anmerkung: Kettenbrüche sind nicht eindeutig. Für an>1 gilt

[a0, . . . ,an1,an] = [a0, . . . ,an1,an−1+11] = [a0, . . . ,an1,an−1,1].

(8)

Näherungsbrüche

Ziel: Wir wollen zeigen, dass[a0,a1, . . .]stets konvergiert.

Wir definieren

p2=0 p1=1 pn=anpn1+pn2 q2=1 q1=0 qn=anqn1+qn2 Dann gilt pq0

0 = a10 = [a0]und pq1

1 = a1aa0+1

1 =a0+a1

1 = [a0,a1].

Wir können die Rekursion in Matrix-Schreibweise darstellen.

Die Startwerte sind

p1 p2 q1 q2

=

1 0 0 1

.

Die Rekursionsgleichung können wir in folgender Form schreiben.

pn pn1 qn qn1

=

pn1 pn2 qn1 qn2

an 1 1 0

Damit können wir die Rekursion einfach auflösen zu pn pn1

qn qn1

=Qn i=0

ai 1 1 0

.

(9)

Näherungsbrüche

Lemma Näherungsbrüche

Für alle n∈N0und alle positiven r ∈Rgilt [a0,a1, . . . ,an] = pqn

n und[a0,a1, . . . ,an,r] = rprqn+pn1

n+qn1. Beweis:

Wir zeigen zunächst die zweite Gleichung per Induktion über n.

IA für n=0:[a0,r] = ra0r+1 =a0+1r.

IS für n−1→n: Wir schreiben[a0, . . . ,an,r]als [a0, . . . ,an+1r]IV= (an+

1

r)pn−1+pn−2

(an+1r)qn1+qn2 = pn+

1 rpn−1

qn+1rqn1 = rprqn+pn1

n+qn1. Aus der 2. Gleichung erhalten wir

[a0,a1, . . . ,an1,r] = rprqn1+q+pn2 für alle r ∈R.

(10)

Eigenschaften von Näherungsbrüchen

Lemma Eigenschaften von Näherungsbrüchen Es gilt

1 qn+1>qnn für n∈N.

2 pnqn1pn1qn = (−1)n+1für n∈N0.

3 pnqn2pn2qn = (−1)nanfür n∈N0.

4 ggT(pn,qn) =1.

Beweis:

(1) IA für n=1: Es gilt q0=1, q1=a1≥1 und damit q2=a2q1+q0q1+q0>q1≥1.

IS nn+1: Es gilt

qn+1=anqn+qn1qn+qn1>qnn.

(2) Wir schreiben pnqn1pn1qnals det

pn pn1

qn qn1

=detQn i=0

ai 1 1 0

=Qn i=0det

ai 1 1 0

= (−1)n+1.

Referenzen

ÄHNLICHE DOKUMENTE

Programm gibt, dass für ein beliebiges anderes Programm entscheidet, ob es für eine bestimmte Eingabe in eine Endlosschleife gerät oder nicht.. • Dieses Problem heißt

• Für ein elegantes Programmieren sind gelegentlich Variablen, deren Wert geändert werden kann, ganz nützlich :-). • Darum erweitern wir unsere kleine Programmiersprache

• Am besten wäre es, wenn wir erst auswerten, dann auf das Ergebnis zugreifen .... Helmut Seidl, TU München ;-).. dem Wert für stop ). → Es werden automatisch alle

Eine mathematische Funktion f ist theoretisch berechenbar, wenn es einen Algorithmus gibt, der für eine beliebige Eingabe x aus dem Definitionsbereich den Funktionswert f (x

Ob ein Schluss von einer Aussage auf eine andere richtig ist, sollte sich völlig unabhängig vom Gehalt dieser Aussagen nur aufgrund von formalen Regeln begründen lassen.“

So ist die Beschreibung, wie man am schnellsten von Ascona nach Brindisi kommt, kein Algorithmus im eigentlichen Sinne (auch wenn diese eine Handlungsanweisung an einen

[r]

Als ersten Schritt ist es daher notwendig eine Syntax für einen Link zu definieren, nach der dann im Anschluss im Quelltext einer Webseite nach Links zu Webseiten gesucht werden