Prof. Dr. Gerhard Berendt SS 2005 Mathematische Grundlagen der Codierung / Endliche Strukturen Arbeitsblatt 1 b / S. 1 von 9 Ein wesentliches Unterscheidungsmerkmal zwischen Ring und Körper ist die Frage der Teilbarkeit, die zunächst am Beispiel der ganzen Zahlen demonstriert werden soll. Grundlegende Eigenschaften der ganzen Zahlen. Die Menge Z ist mit den Operationen der Addition und der Multiplikation ein Ring; daher existiert nicht zu jedem (tatsächlich zu fast keinem) z Z ein multiplikatives Inverses. Möglich ist in der Regel nur eine ganzzahlige Division mit Rest 1: Satz 1.3: Seien a und b ganze Zahlen, b > 0. Dann existieren eindeutige ganze Zahlen q und r mit 0 r < b, so dass (1.1) ist. a=qb+r Beweis: Man betrachte die Folge ... -3b, -2b, -b, 0, b, 2b, 3b, ... Dann gilt für ein geeignetes q Z , dass q b a < (q + 1) b bzw. 0a–qb<b ist. Mit r : = a – q b, ist daher (1.1) erfüllt. Die Eindeutigkeit folgt wie üblich durch Widerspruchsbeweis: Angenommen, es existieren zwei Zahlenpaare q1 , r1 und q2 , r2 , die (1,1) erfüllen, dann ist also (q1 – q2) b = r2 – r1 . Sei nun o.B.d.A. etwa r2 > r1 , dann teilt also b die Differenz r2 – r1 , was unmöglich ist, da r2 – r1 < b ist. Mithin muß r2 = r1 und daher – da Z keine Nullteiler enthält – auch q1 = q2 sein. 1 Ringe, in denen das möglich ist, werden als Euklidische Ringe bezeichnet. Prof. Dr. Gerhard Berendt SS 2005 Mathematische Grundlagen der Codierung / Endliche Strukturen Arbeitsblatt 1 b / S. 2 von 9 Definition 1.4: Sei a = 2 q + r, a, q, r Z, 0 r < q. Dann heisst a gerade, wenn r = 0 und ungerade, wenn r = 1 . Definition 1.5: Wenn r = 0 in (1.1), dann heisst a " teilbar durch b" oder "b teilt a". Man schreibt dann (b | a). Folgerung: Falls für ganze Zahlen a und b gilt, dass (d | a) und (d | b), dann teilt d auch jede ganzzahlige Linearkombination von a und b. Die Frage der Teilbarkeit führt unmittelbar auf die wichtige Teilmenge der ganzen Zahlen, die nur durch sich selbst und 1 ohne Rest teilbar sind. Primzahlen. Definition 1.6: Eine natürliche Zahl a > 1 heisst Primzahl (kurz: prim), wenn sie nur durch sich selbst und durch 1 teilbar ist. Eine natürliche Zahl, die nicht prim ist, heisst zusammengesetzt. Satz 1.7 (EUKLID): Es gibt unendlich viele Primzahlen. Beweis (aus der Schule bekannt): Angenommen, es gäbe nur endlich viele Primzahlen, und N sei ihr Produkt. Dann betrachte man die Zahl X = p1 p2 ... pk + 1. Falls X prim ist, ist sie größer als N und daher eine neue Primzahl. Andernfalls hat X einen Primfaktor q. Wäre q eine Primzahl N, dann wäre q | p1 p2 ... pk , und da q | X , müsste q auch die Differenz, also 1, teilen, was unmöglich ist. Also muss q eine neue Primzahl sein. Über Primzahlen gibt es eine Reihe von einfachen Sätzen, z.B. : Prof. Dr. Gerhard Berendt SS 2005 Mathematische Grundlagen der Codierung / Endliche Strukturen Arbeitsblatt 1 b / S. 3 von 9 Satz 1.8: Wenn n eine natürliche Zahl ≥ 1 ist, dann existiert eine Primzahl p mit n < p n!+1. Beweis: Man betrachte die Zahl N = n!+1. Falls N prim ist, setzt man p = N. Ist N nicht prim, dann besitzt es einen Primfaktor p. Falls p n, dann ist p Teiler von n!, also auch von (N – n!), was sinnlos ist, da N – n! = 1 ist. Also ist p > n. Satz 1.9: Sei x eine reelle Zahl > 1, dann existiert eine Primzahl zwischen x und 2x. Zum Beweis vgl. z.B. Hardy, G.H., Wright, E.M., "An Introduction to Theory of Numbers", Oxford University Press, 1979. Satz 1.10: Sei n eine ganze Zahl ≥ 2. Dann gibt es keine Primzahlen zwischen n!+2 und n!+n. Beweis: Da n! das Produkt aller ganzer Zahlen zwischen 1 und n ist, gilt 2 | n!+2, 3 | n!+3, ..., n | n!+n. Satz 1.11: Falls n zusammengesetzt ist, hat n einen Primteiler p n. Beweis: Sei p der kleinste Primteiler von n . Ist n = rs, dann ist p r und p s. Also ist p 2 rs = n, mithin p n. Das bekannte "Sieb des Eratosthenes" verwendet den Satz 1.11 zur Bestimmung aller Primzahlen unterhalb einer gegebenen positiven ganzen Zahl n. Über die Anzahl der Primzahlen unterhalb einer natürlichen Zahl n gibt die in der Zahlentheorie genauer untersuchte Funktion π(n) Auskunft. Der Fundamentalsatz der Zahlentheorie. Eine einfache, aber wichtige Eigenschaft der zusammengesetzten Zahlen beschreibt der Satz 1.12: Jede zusammengesetzte Zahl besitzt einen Primfaktor. Beweis: Sei n eine zusammengesetzte Zahl. Dann ist n = n1 n2, Prof. Dr. Gerhard Berendt SS 2005 Mathematische Grundlagen der Codierung / Endliche Strukturen Arbeitsblatt 1 b / S. 4 von 9 wobei n1 und n2 positive ganze Zahlen mit n1 ,n2 < n sind. Falls entweder n1 oder n2 prim sind, ist der Satz bewiesen. Sind beide nicht prim, dann ist n1 = n3 n4 , wobei n3 und n4 positive ganze Zahlen mit n3 ,n4 < n1 sind. Die Fortsetzung des Gedankens führt entweder nach endlich vielen Schritten auf einen Primfaktor von n, oder aber wir erhalten eine Folge natürlicher Zahlen n > n1 > n3 > ... > n2k-1 > 0, die notwendig nach endlich vielen Schritten mit einem n2k-1 , das prim ist, abbrechen muß. Damit kann der Fundamentalsatz der Zahlentheorie bewiesen werden: Satz 1.13 (Fundamentalsatz der Zahlentheorie): Jede natürliche Zahl n > 1 kann eindeutig als Produkt von Primzahlpotenzen geschrieben werden: n p1 1 p2 2 pk (1.2) k k pi i i 1 Beweis: als Übung. Der grösste gemeinsame Teiler (ggT). Definition 1.14: Seien a und b ganze Zahlen, die nicht beide gleich Null sind. Der grösste Teiler d derart, dass d | a und d | b gilt, heisst grösster gemeinsamer Teiler von a und b. Er wird mit ggT(a,b) bezeichnet. Satz 1.15: Der ggT(a,b) kann als ganzzahlige Linearkombination von a und b geschrieben werden (x, y Z): (1.3) d ggT (a, b) a x b y . Beweis: Man betrachte die Menge M aller Linearkombinationen a u + b v, wobei u und v über alle ganzen Zahlen laufen. Diese Menge enthält positive und negative Elemente Prof. Dr. Gerhard Berendt SS 2005 Mathematische Grundlagen der Codierung / Endliche Strukturen Arbeitsblatt 1 b / S. 5 von 9 und auch die Null. Man wähle nun diejenigen Werte x und y, für die das Element m = ax+by den kleinsten positiven Wert in M annimmt. Nach Satz 1.3 gibt es ein r mit 0 r <m, so dass a = m q + r gilt. Dann ist r a m q a q(ax by) (1 q x) a (q y) b , und daher ist r ebenfalls eine Linearkombination von a und b. Da jedoch r < m ist, folgt aus der Definition von m, dass r = 0 ist. Folglich ist a = m q, d.h m | a . Ebenso zeigt man, dass m | b . m ist mithin ein gemeinsamer Teiler von a und b. Da d ebenfalls a und b und mithin auch deren Linearkombination m teilt, muss d m sein; da andererseits jedoch d = ggT(a,b) ist, folgt d = m . Definition 1.16: Zwei ganze Zahlen a und b heissen relativ prim, wenn ggT(a,b) = 1 ist. Es gilt der Satz 1.17: Seien a und b zwei ganze Zahlen, die nicht beide gleich Null sind. Dann sind a und b genau dann relativ prim, wenn zwei ganze Zahlen x und y mit a x + b y = 1 existieren. Beweis: Falls a und b relativ prim sind, also ggT(a,b) = 1 ist, dann folgt die Behauptung aus Satz 1.15. Sei umgekehrt a x + b y = 1 und d = ggT(a,b). Da a und b durch d teilbar sind, gilt dies auch für a x + b y; mithin ist 1 durch d teilbar. Also ist d = 1. Satz 1.18: Falls a | bc und ggT(a,b) = 1, dann ist auch a | c . Beweis: als Übung. Analog zum ggT(a,b) wird das kleinste gemeinsame Vielfache kgV(a,b) definiert. Formulieren Sie die Definition als Übung. Interessant ist noch der folgende Prof. Dr. Gerhard Berendt SS 2005 Mathematische Grundlagen der Codierung / Endliche Strukturen Arbeitsblatt 1 b / S. 6 von 9 Satz 1.19 (KNUTH): Falls a und b zufällig gewählte ganze Zahlen sind, ist die Wahrscheinlichkeit dafür, dass ggT(a,b) = 1 ist, gleich 6 / π 2 = 0.60793… Zum Beweis vgl. man D.E. Knuth, "The Art of Computer Programming II - Seminumerical Algorithms, Addison-Wesley 1998. Der EUKLIDische Algorithmus zur Bestimmung des ggT. Der EUKLIDische Algorithmus erlaubt die Bestimmung des ggT zweier ganzer Zahlen a und b und – in erweiterter Form – die Berechnung der Faktoren von a und b in der Linearkombination aus Satz 1.15. Der Algorithmus ist ein Korollar von Satz 1.20: Seien a, b, q, r ganze Zahlen mit b > 0 und 0 r < b so, dass a = b q + r . Dann ist ggT(a,b) = ggT(b,r). Beweis: Seien X = ggT(a,b) und Y = ggT(b,r). Falls für eine ganze Zahl c gilt, dass c | a und c | b , dann folgt, dass auch c | r gilt. Mit dem gleichen Argument folgt, dass jeder gemeinsame Teiler von b und r auch Teiler von a ist. Daher ist auch X = Y. Wendet man die Aussage von Satz 1.20 sukzessive auf die ganzzahligen Divisionswerte und jeweiligen Reste an, dann muss das Verfahren nach endlich vielen Schritten abbrechen, weil die Reste eine streng monoton fallende Folge von natürlichen Zahlen bilden und daher irgendwann ein Rest Null auftritt. Der Rest des Schritts davor ist dann der ggT(a,b): Algorithmus 1.21 von EUKLID zur Bestimmung von ggT(a,b), (a,b ≠0): 1. Wähle |a| |b| und setze r = a und s = b. 2. Bestimme q und p mit r = q s + p . Falls p = 0 ist, gib d = s als ggT(a,b) aus und beende den Algorithmus. 3. Setze r = s und s = p und gehe zu 2. Bemerkungen: Die Laufzeit des EUKLIDischen Algorithmus ist polynomial. Sie kann auf verschiedene Weisen abgeschätzt werden (vgl. dazu auch den Satz 1.24 am Schluß Prof. Dr. Gerhard Berendt SS 2005 Mathematische Grundlagen der Codierung / Endliche Strukturen Arbeitsblatt 1 b / S. 7 von 9 des Arbeitsblatts). Hier soll eine eher klassische Abschätzung der Laufzeit notiert und der dazugehörige Beweis skizziert werden: Satz 1.22: Seien a und b ganze Zahlen mit |a | > |b | > 0. Dann gilt für die Anzahl n der Divisionen, die der EUKLIDische Algorithmus zur Bestimmung des ggT(a,b) benötigt: n 1 + 5 log10 |b | . Beweisskizze: Man betrachtet die Folge Fn der so genannten FIBONACCI-Zahlen, die für jedes nicht-negative ganzzahlige n durch Fn+2 = Fn+1 + Fn ; F0 = 1, F1 = 1 definiert ist. Dann beweist man zunächst durch Induktion, dass für die k-ten Reste rk bei der Durchführung des EUKLIDischen Algorithmus, der nach n Divisionen abbricht, gilt rn-k Fk+2 , k = 1, 2, ... n . Daher ist speziell |b | = r1 Fn+1 und |a | = r0 Fn+2 . Ist nun n = 1, dann ist nichts zu beweisen. Ist n 2, dann zeigt man (wieder durch vollständige Induktion), dass Fn+1 > (8/5) n-1 gilt. Daher ist |b | Fn+1 > (8/5) n-1. 5 Schließlich ergibt sich also wegen 8 / 5 10 , dass log10 | b | (n 1) log10 8 1 (n 1) log10 (5 10 ) (n 1) 5 5 ist, woraus die Behauptung unmittelbar durch Auflösung nach n folgt. Die Anzahl der Divisionen, die der Algorithmus zur Berechnung des ggT erfordert, ist mithin durch das Fünffache der Stellenzahl der kleineren der beiden Zahlen nach oben beschränkt; der EUKLIDische Algorithmus ist daher auch bei großen Argumenten sehr schnell. Da jeder Rest eine Linearkombination der beiden zuvor berechneten Reste ist, kann auch die Linearkombination in Satz 1.15 rekursiv ermittelt werden. Hierzu kann der folgende Algorithmus dienen: Algorithmus 1.23 zur Bestimmung der Faktoren u und v in ggT(a,b ) = ua+vb: 1. Setze u = 1 und d = a. Falls b = 0 ist, setze v = 0 und beende den Algorithmus, andernfalls setze v1 = 0 und v2 = b.. Prof. Dr. Gerhard Berendt SS 2005 Mathematische Grundlagen der Codierung / Endliche Strukturen Arbeitsblatt 1 b / S. 8 von 9 2. Berechne q und r mit d = q v2 + r durch eine Division mit Rest, und setze t = u - q v1, u = v1 , d = v2 , v1 = t und v2 = r. 3. Falls v2 = 0 ist, setze v = (d - au) / b und beende den Algorithmus; ansonsten gehe zu 2. Bemerkung: Der Algorithmus 1.23 kann zur Bestimmung von Inversen in Restklassen benutzt werden. Beispiel 1: Der ggT von 1547 und 560 soll mit dem EUKLIDischen Algorithmus bestimmt werden. Man erhält: 1547 2 560 427 560 1 427 133 427 3 133 28 133 4 28 21 28 1 21 7 21 3 7 0 Also gilt ggT(1547, 560) = 7. Um diesen Teiler als Linearkombination von 1547 und 560 auszudrücken, berechnet man sukzessive: 7 = 28 1 21 = 28 1 (133 4 28) = 5 28 1 133 = 5 (427 3 133) 1 133 = 5 427 16 133 = 5 427 16 (560 1 427) = 21 427 16 560 = 21 (1547 2 560) 16 560 = 21 1547 58 560 . Beispiel 2: Um die multiplikative Inverse zu a 5 mod 21 zu bestimmen, berechnet man mit dem Algorithmus 1.23 die Koeffizienten in der Gleichung (ggT(21, 5) = 1): 1 = x 21 + y 5 Prof. Dr. Gerhard Berendt SS 2005 Mathematische Grundlagen der Codierung / Endliche Strukturen Arbeitsblatt 1 b / S. 9 von 9 zu x = 6 und y = - 25 17 mod 21. Mithin ist 5 17 = 85 = 4 21 + 1 1 mod 21 , also 17 5 -1 mod 21 . Aufgabe: Implementieren Sie die Algorithmen 1.21 und 1.23 in einer Sprache Ihrer Wahl. Satz 1.24: Der ggT zweier ganzer Zahlen a und b mit a > b erfordert einen Rechenaufwand von O(log3 a). Beweis: Um den Rechenaufwand abzuschätzen, muß die Anzahl der erforderlichen Divisionen ermittelt werden. Wie gezeigt, bilden die sukzessiven Reste eine streng monoton gegen Null fallende Folge ganzer Zahlen. Wir zeigen zunächst, dass jeweils r j+2 < ½ r j gilt: Ist r j+1 ½ r j , dann folgt sofort r j+2 < r j+1 ½ r j . Sei also r j+1 > ½ r j . In diesem Falle ergibt die nächste Division r j = 1 r j+1 + r j+2 , und damit r j+2 = r j – r j+1 < ½ r j , wie behauptet. Da nun nach jeweils 2 Schritten der Rest höchstens halb so groß ist wie anfangs, und da der Rest niemals unterhalb 1 gelangt, gibt es also höchstens 2 log2 a Divisionen; dies ist O(log a). Jede Division enthält keine größere Zahl als a, und benötigt daher O(log2 a) Bit-Operationen. Daher ergibt sich der Gesamtaufwand des Algorithmus zu O(log a) O(log2 a) = O(log3 a). Bemerkung: Der gleiche Aufwand ergibt sich für die Bestimmung der Koeffizienten in der Linearkombination in Satz 1.17.