Der euklidische Algorithmus

Werbung
Der euklidische Algorithmus
Manfred Gruber
http://www.lrz-muenchen.de/~gruber
SS 2010, KW 22
M. Gruber, SS 2010
Diskrete Mathematik
Größter gemeinsamer Teiler
Definition 1. [Teiler] Eine Zahl m 2 N ist Teiler
n
von n 2 Z, wenn der Quotient m
2 Z ist. Ist m
Teiler von n, schreibt man m j n, andernfalls m - n.
Definition 2. [ggT] Größter gemeinsamer Teiler
(ggT) zweier Zahlen m; n 2 Z ist diejenige größte
Zahl, die zugleich Teiler von m und n ist. Diese Zahl
ist eindeutig bestimmt und wird mit ggT(m; n)
bezeichnet.
Bemerkung 1. Für n > 0 ist ggT(0; n) = n,
denn n teilt 0 und n, andrerseits können Teiler von
0 und n nicht größer als n sein.
Bemerkung 2. ggT(0; 0) ist nicht definiert, denn
die Menge der Teiler von 0 ist unbeschränkt und
hat kein Maximum.
1
M. Gruber, SS 2010
Diskrete Mathematik
Primzahlen
Definition 3. [teilerfremd] Zwei Zahlen m; n
Z heißen teilerfremd, wenn ggT(m; n) = 1 ist.
2
Definition 4. [prim] Eine Zahl p > 1 heißt prim
(Primzahl), wenn 1 und p die einzigen Teiler von p
sind.
Bemerkung 3. Ist p prim, so ist
allen positiven Zahlen kleiner p.
p
teilerfremd zu
Satz 1. [Fundamentalsatz der Arithmetik] Jede
Zahl n 2 N kann als Produkt von Primzahlen
n
=
1 pm
p
dargestellt werden und unter der Bedingung
1 : : : pm:
p
ist diese Darstellung eindeutig.
2
M. Gruber, SS 2010
Diskrete Mathematik
floor, modulo
Definition 5. [floor] Für x 2 R bezeichnet bxc
(“floor x”, “ganzzahliger Anteil von x”) die größte
Zahl aus Z, die kleiner oder gleich x ist.
Eine Zahl x “mit Rest” durch eine Zahl y dividieren
heißt: Ermitteln, welches ganzzahlige Vielfache von
y in x enthalten ist. Den verbleibenden Rest nennt
man “x mod y ”:
Definition 6. [modulo] Für
x
Im Fall
y
=0
mod
y
=
x
x; y
b
y
legt man fest:
2 Z ist
x=y
b
x=y
c
:
c = 0.
Beispiel 1.
b5 3c = 2
( 3) b5 ( 3)c = 1
5
3 b 5 3c = 1
( 3) b 5 ( 3)c =
5 mod 3 = 5
5 mod
3=5
5 mod 3 =
5 mod
3=
5
3
=
;
=
;
=
=
;
2:
3
M. Gruber, SS 2010
Diskrete Mathematik
Klassischer euklidischer Algorithmus
Den größten gemeinsamen Teiler ggT(m; n) zweier
Zahlen m; n 2 Z mit 0 m < n kann man nach
Euklid rekursiv berechnen durch
ggT(0; n)
=
n
ggT(m; n)
=
ggT(n mod m; m);
(1)
m >
0:(2)
(1) und (2) beschreiben zusammen einen
Rekursionsalgorithmus. (2) stellt gleichzeitig eine
Behauptung dar.
1. Die Rekursion muss nach endlich vielen Schritten enden,
nämlich dann, wenn sich für
n
mod
m
Null ergibt.
2. Die Behauptung, die in (2) steckt, ist wahr, da jeder
gemeinsame Teiler von m und n auch gemeinsamer Teiler
von n mod m = n
m
b
c und
n=m
Beispiel 2. ggT(54; 87) =
ggT(21; 33) = ggT(12; 21)
ggT(3; 9) = ggT(0; 3) = 3.
m
ist und umgekehrt.
ggT(33; 54)
= ggT(9; 12)
=
=
4
M. Gruber, SS 2010
Diskrete Mathematik
Erweiterter euklidischer Algorithmus
Der ggT(x1; x0) (0
durch die Rekursion
x
+1 = xi 1
xi
die mit
Mit
qi
2
3
6 x
i
6
6
6
4
7
7
7
7
5
+1
xi
Aus
xn
=
b
xi
1=xic und
6x
6 i
Qi 6
6
4
xi
3
2
6 x
n
6
6
6
4
7
7
7
7
5
6a
6
6
6
4
+1
xi
b
=
Qi
=
3
2
3
7
5
6 x
n
6
6
6
4
7
7
7
7
5
1777
2
xn
< x
0) wird berechnet
xi
1=xic ;
(3)
+1 = 0 und ggT(x1;2x0) = x3n 6= 0 endet.
2
=
1
und
xn
32
+1
60
6
6
6
4
1
1
qi
7
7
7
7
5
gilt
2
=
Qn Qn
|
1 {z
=: a b
3
0777
1 75
x1
6x
6
Q 6
6
}4
3
76
76
54
07
7 folgt die Darstellung
5
x1
=
ax
6
7
b7
7 6x 7
ggT(x1; x0) = xn
0 + bx1
(a; b
2 Z)
:
(4)
5
:
M. Gruber, SS 2010
Diskrete Mathematik
Beispiel 3. Mit den Zahlen von Beispiel 2 gilt
2
6777
7
5
x7
6x
6
6
6
4
=
3
32
2
3
60
6
6
6
4
1
1
7
7
7
7
5
3
60
6
6
6
4
1
32
2
=
5
6
6
6
6
4
18
1
7
7
7
7
5
1
52
3
6877
7
6
7
6
7
6
5
4
54
3
877 668777
29
76
76
54
7
7
5
54
2 3
=
637
6 7
6 7
6 7
4 5
0
und damit
ggT(54; 87) = 5 87 + (
8) 54 = 3 :
Aus dieser Beziehung kann man z.B. ablesen, dass
( 8) 54 mod 87 = 79 54 mod 87 = 3
ist.
6
M. Gruber, SS 2010
Diskrete Mathematik
Effizienz des euklidischen Algorithmus
Benachbarte Fibonacci-Zahlen sind teilerfremd. Dies sieht
man, wenn man die rekursive Berechnung der FibonacciZahl
Fn
+1 “aufrollt” und die entstehenden Gleichungen als
euklidische Divisionen interpretiert:
F
c Fn + Fn+1 mod Fn
+1 = 1 Fn + Fn 1 = b nF+1
n
Fn
Fn
=1
Fn
1 + Fn 2 = b Fnn 1 c Fn 1 + Fn mod Fn 1
F
...
F
2 = 1 F1 + F0 = b F21 c F1 + F2 mod F1
F
Diese Gleichungen zeigen noch etwas: Die Fibonacci-Zahlen
Fn
+1; Fn sind die kleinsten Eingabedaten des euklidischen
Algorithmus, die zu
n
Divisionen mit Rest führen. d.h. sind
zur Berechnung des ggT zweier beliebiger Zahlen
mindestens
n
Schritte erforderlich, so ist x0
Fn
x
1
0
< x
+1.
Es lässt sich daraus herleiten, dass die Anzahl benötigter
Divisionen mit Rest beim euklidischen Algorithmus höchstens
linear mit der Stellenzahl der Eingabedaten wächst.
7
M. Gruber, SS 2010
Diskrete Mathematik
Literatur
[CM] Ronald L. Graham, Donald E. Knuth and Oren Patashnik, Concrete Mathematics: A Foundation for Computer
Science. Addison-Wesley, 1989; second edition, 1994.
http://www-cs-faculty.stanford.edu/~knuth/
gkp.html
8
Herunterladen