Mathematik für Informatiker B, SS 2012 Donnerstag 12.4 $Id: modul.tex,v 1.10 2012/04/12 12:24:19 hk Exp $ §1 Modulare Arithmetik 1.2 Euklidischer Algorithmus Am Ende der letzten Sitzung hatten wir den größten gemeinsamen Teiler zweier ganzer Zahlen a und b eingeführt, und auch bereits einige seiner Eigenschaften bewiesen. Im folgenden werden wir zum einen die Existenz des größten gemeinsamen Teilers einsehen, und zum anderen ein Verfahren zu seiner Berechnung angeben. Einen kleinen Sonderfall muss man dabei allerdings ausnehmen. Ist a = b = 0, so ist überhaupt jedes c ∈ Z ein gemeinsamer Teiler von a und b, und es kann keinen größten gemeinsamen Teiler geben. Ist genau eine der beiden Zahlen a, b Null, etwa a 6= 0 und b = 0, so sind die gemeinsamen Teiler von a und b genau die Teiler von a, und es folgt ggt(a, b) = |a|. Hier gibt es also einen größten gemeinsamen Teiler, aber er ist uninteressant. Daher werden wir uns bei der Berechnung des größten gemeinsamen Teilers auf den Hauptfall a, b 6= 0 beschränken. Der euklidische Algorithmus kann verwendet werden, um den größten gemeinsamen Teiler d = ggt(a, b) zweier ganzer Zahlen a, b ∈ Z∗ zu ermitteln. Im Fall |a| = |b| ist b = ±a und dann ist ggt(a, b) = |a|. Wir können uns also auf den Fall |a| = 6 |b| beschränken, und durch eventuelles Vertauschen von a und b können wir weiter sogar |a| > |b| annehmen. Da Vorzeichen auf Teilbarkeit und damit auch auf den größten gemeinsamen Teiler keinen Einfluss haben, kann man sich sogar auf den Hauptfall a > b > 0 beschränken. Wir beginnen mit einem kleinen Beispiel und wollen den größten gemeinsamen Teiler von 91 und 113 berechnen. Wir stützen uns dabei auf Lemma 5.(d). Teilen wir die größere Zahl 113 mit Rest durch 91, so ist 113 = 91 + 22, also 113 − 91 = 22 und das Lemma ergibt ggt(113, 91) = ggt(113 − 91, 91) = ggt(22, 91) = ggt(91, 22). Damit ist die Berechnung des größten gemeinsamen Teilers auf ein einfacheres Problem reduziert. Wir können so fortfahren und auch 91 mit Rest durch 22 teilen, also 91 = 4 · 22 + 3 und somit ggt(91, 22) = ggt(91 − 4 · 22, 22) = ggt(3, 22) = ggt(22, 3). An dieser Stelle sehen wir natürlich schon direkt das der größte gemeinsame Teiler 1 ist, der Systematik halber wollen wir aber noch einmal 22 mit Rest durch 3 teilen, also 22 = 7 · 3 + 1 und erhalten diesmal ggt(22, 3) = ggt(22 − 7 · 3, 3) = ggt(1, 3) = 3, 2-1 Mathematik für Informatiker B, SS 2012 Donnerstag 12.4 also insgesamt ggt(113, 91) = 1. Zusammengefasst haben wir die folgende Rechnung durchgeführt: 113 91 22 3 = = = = 91 · 1 + 22 =⇒ ggt(113, 91) = ggt(91, 22) 22 · 4 + 3 =⇒ ggt(91, 22) = ggt(22, 3) 3 · 7 + 1 =⇒ ggt(22, 3) = ggt(3, 1) 1·3 insgesamt ggt(91, 113) = 1. Dieses Verfahren durch fortgesetzte Division mit Rest schließlich den größten gemeinsamen Teiler zu bestimmen, wird als der euklidische Algorithmus bezeichnet. Wir wollen ihn einmal auch allgemein beschreiben. Gegeben seien also zwei Zahlen a, b ∈ Z∗ normiert auf |a| > |b|. Dann teilen wir die größere Zahl a mit Rest durch b, schreiben also a = bq0 + r0 , 0 ≤ r0 < |b| wobei q0 ∈ Z den Quotienten und r0 ∈ N den Rest bezeichnet. Ist r0 = 0, also b|a, so ist nach Lemma 5.(a) sofort ggt(a, b) = |b|, und wir sind bereits fertig. Andernfalls dividieren wir b mit Rest durch r0 , also b = r 0 q1 + r 1 , 0 ≤ r 1 < r 0 . Ist nun r1 = 0, so hören wir auf, andernfals dividieren wir r0 mit Rest durch r1 r 0 = r 1 q2 + r 2 , 0 ≤ r 2 < r 1 , dann r1 mit Rest durch r2 und immer so weiter, bis irgendwann der Rest 0 auftaucht, sagen wir nach n + 2 Schritten rn−2 = rn−1 qn + rn , 0 ≤ rn+1 < rn−1 , rn−1 = rn qn+1 . Da der Rest in jedem Schritt echt kleiner wird, müssen wir irgendwann einmal an diese Stelle kommen. Der größte gemeinsame Teiler von a und b ist dann der letzte von Null verschiede Rest rn = ggt(a, b). Diese Aussage folgt wie im Beispiel durch fortgesetzte Anwendung von Lemma 5.(b). Man arbeitet sich von unten nach oben durch den euklidischen Algorithmus. In der Abbruchzeile hatten wir rn−1 = rn qn+1 , und somit besagt Lemma 5.(a) auch ggt(rn , rn−1 ) = ggt(rn , rn qn+1 ) = rn . Angenommen wir wissen bereits rn = ggt(ri , ri−1 ) für ein 1 < i ≤ n, für i = n ist dies beispielsweise der Fall. Die (i + 1)-te Zeile des euklidischen Algorithmus ist dann ri−2 = ri−1 qi + ri 2-2 Mathematik für Informatiker B, SS 2012 Donnerstag 12.4 beziehungsweise ri = ri−2 − ri−1 qi und Lemma 5.(b) ergibt rn = ggt(ri , ri−1 ) = ggt(ri−2 − ri−1 qi , ri−1 ) = ggt(ri−2 , ri−1 ) = ggt(ri−1 , ri−2 ). Für wir also eine rückwärts laufende Induktion von i = n bis nach i = 1 durch, so ergibt sich mit i = 1 schließlich rn = ggt(r1 , r0 ). Wenden wir jetzt noch zweimal Lemma 5.(b) an, so ist letztlich rn = ggt(r1 , r0 ) = ggt(b − r0 q1 , r0 ) = ggt(r0 , b) = ggt(a − bq0 , b) = ggt(a, b). Damit ist bewiesen das der letzte von Null verschiedene Rest rn im euklidischen Algorithmus der größte gemeinsame Teiler von a und b ist, und insbesondere ist damit die Existenz von ggt(a, b) eingesehen. Wir wollen noch ein zweites Beispiel zum euklidischen Algorithmus rechnen und zwar ggt(91, 133). 133 = 91 · 1 + 42 91 = 42 · 2 + 7 42 = 7 · 6 =⇒ ggt(91, 133) = 7. Wir fassen nun die bisherigen Ergebnisse über den größten gemeinsamen Teiler in einem Satz zusammen. Bei der Gelegenheit können wir dem eukldischen Algorithmus noch eine zusätzliche Tatsache entnehmen, der größte gemeinsame Teiler läßt sich immer als eine ganzzahlige Kombination von a und b schreiben. Dies wird manchmal auch als die Wechselsummendarstellung des größten gemeinsamen Teilers bezeichnet. Satz 1.6 (Wechselsummendarstellung des größten gemeinsamen Teilers) Zu zwei ganzen Zahlen a, b ∈ Z, a, b 6= 0, gibt es genau einen größten gemeinsamen Teiler d = ggt(a, b). Ferner existieren α, β ∈ Z mit d = αa + βb. Beweis: Die Eindeutigkeit von ggt(a, b) haben wir mit Lemma 4 gezeigt. Die Existenz des größten gemeinsamen Teilers ergab sich aus dem euklidischen Algorithmus a = bq0 + r0 , 0 ≤ r0 < |b|, b = r 0 q1 + r 1 , 0 ≤ r 1 < r 0 , r 0 = r 1 q2 + r 2 , 0 ≤ r 2 < r 1 , .. .. . . rn−2 = rn−1 qn + rn , 0 ≤ rn < rn−1 , rn−1 = rn qn als d = ggt(a, b) = rn , wobei wir uns bereits stillschweigend auf den Fall |a| > |b| normiert haben. Es ist nur noch die Darstellung von d = rn als ganzzahlige Kombination 2-3 Mathematik für Informatiker B, SS 2012 Donnerstag 12.4 von a und b einzusehen, und hierzu werden wir induktiv die stärkere Aussage zeigen, dass es für alle 0 ≤ i ≤ n stets αi , βi ∈ Z mit ri = αi a + βi b gibt. Für i = 0 müssen wir dabei wegen r0 = a − q0 b nur α0 = 1, β0 = −q0 setzen. Für i = 1 ist r1 = b − q1 r0 = b − q1 (α0 a + β0 b) = −q1 α0 a + (1 − q1 β0 )b, wir können also α1 = −q1 α0 und β1 = 1 − q1 β0 verwenden. Ist weiter 1 < i ≤ n und haben wir die verlangte Darstellung von rj für 0 ≤ j < i bereits gefunden, so ergibt sich auch ri = ri−2 −qi ri−1 = αi−2 a+βi−2 b−qi (αi−1 a+βi−1 b) = (αi−2 −qi αi−1 )a+(βi−2 −qi βi−1 )b, wir setzen also αi := αi−2 − qi αi−1 und βi := βi−2 − qi βi−1 . Per Induktion haben wir dann ri = αi a + βi b für überhaupt alle 0 ≤ i ≤ n, und speziell für i = n ergibt sich d = rn = αn a + βn b. Das im Beweis verwendete Verfahren liefert uns auch eine Methode die Zahlen α, β auszurechnen, wir müssen nur die Rechnung im euklidischen Algorithmus verfolgen, und in jedem Schritt den aktuellen Rest ri als Kombination von a und b schreiben. Wir wollen dies einmal am Beispiel von ggt(91, 133) = 7 durchführen. 133 = 91 · 1 + 42, 42 = 133 − 91, 91 = 42 · 2 + 7, 7 = 91 − 2 · 42 = 91 − 2 · (133 − 91) = 3 · 91 − 2 · 133, und wir haben die Wechselsummendarstellung gefunden. Zum Abschluß wollen wir noch zwei kleine Folgerungen aus der Wechselsummendarstellung des größten gemeinsamen Teilers festhalten. Seien hierzu a, b ∈ Z∗ gegeben. Wir nennen a und b teilerfremd wenn ggt(a, b) = 1 ist, und es ergibt sich die folgende Kennzeichung der Teilerfremdheit über die Wechselsummen: a und b sind teilerfremd ⇐⇒ Es gibt n, m ∈ Z mit na + mb = 1. In der Tat, gibt es n, m ∈ Z mit na + mb = 1, so gilt für jeden gemeinsamen Teiler c von a und b auch c|na + mb = 1, also muss c = 1 oder c = −1 sein. Also haben a und b nur die beiden gemeinsamen Teiler ±1 und somit ist ggt(a, b) = 1. Nehmen wir umgekehrt ggt(a, b) = 1 an, so liefert uns die Wechselsummendarstellung des größten gemeinsamen Teilers Satz 6 auch n, m ∈ Z mit na + mb = ggt(a, b) = 1. Die zweite Folgerung aus der Wechselsummendarstellung ist etwas komplizierter. Nehmen an wir haben drei Zahlen a, b, c ∈ Z, sagen wir mit a, b 6= 0. Dabei seien a und b teilerfremd und es gelte a|c und b|c. Wir behaupten das dann auch ab|c gilt, also ∀(a, b ∈ Z∗ , c ∈ Z) : ggt(a, b) = 1 ∧ a|c ∧ b|c =⇒ ab|c. 2-4 Mathematik für Informatiker B, SS 2012 Donnerstag 12.4 Da nämlich a und b teilerfremd sind gibt es n, m ∈ Z mit na + mb = 1. Wegen a|c und b|c gibt es weiter auch ganze Zahlen p, q ∈ Z mit c = pa = qb. Damit folgt c = 1 · c = (na + mb) · c = nac + mbc = nqab + mpab = (nq + mp) · ab, und wir haben auch ab|c wie behauptet. 1.3 Restklassen Nachdem uns nun der Teilbarkeitsbegriff zur Verfügung steht, können wir auch den Kongruenzbegriff modulo einer Zahl m einführen. Definition 1.7: Sei m ∈ N∗ . Zwei ganze Zahlen heißen kongruent modulo m, wenn m|a − b gilt. In diesem Fall schreibt man a ≡ b mod m. In der Literatur findet man auch diverse alternative Schreibweise für die Kongruenz modulo m, zum Beispiel a ≡ b (m) oder a ≡ b. m Die Kongruenz von a und b modulo m bedeutet das sich a von b nur durch ein Vielfaches von m unterscheidet, denn m|a − b besagt die Existenz eines q ∈ Z mit a − b = qm, und dies ist zu a = b + qm gleichwertig. Nun gilt Lemma 1.8: Sei m ∈ N∗ . Dann ist die Relation Kongruenz modulo m“ eine Äquiva” lenzrelation auf Z. Der Beweis dieser Tatsache ist eine Übungsaufgabe. Wie Sie noch aus dem letzten Semester wissen, kann man bei gegebener Äquivalenzrelation die zueinander äquivalenten Elemente zu Äquivalenzklassen zusammenfassen. In Fall der Kongruenz modulo m als Äquivalenzrelation bezeichnet man diese Äquivalenzklassen als Restklassen oder Kongruenzklassen modulo m. Ist a ∈ Z, so schreiben wir [a], oder manchmal auch [a]m wenn wir die Zahl m hervorheben wollen, für die a enthaltende Restklasse, also konkret [a] = {b ∈ Z|a ≡ b mod m} = {a + qm|q ∈ Z}. Die Menge aller Kongruenzklassen modulo m wird mit dem Symbol Zm := {[a]m |a ∈ Z} bezeichnet. Die Grundeigenschaften dieser Restklassen werden im folgenden Lemma beschrieben: Lemma 1.9: Für a, b ∈ Z und m ∈ N∗ sind äquivalent: (a) Es ist a ≡ b mod m. 2-5 Mathematik für Informatiker B, SS 2012 Donnerstag 12.4 (b) Die Zahlen a und b liefern bei Division durch m denselben Rest. (c) Für die Restklassen modulo m gilt [a] = [b]. Beweis: Die Äquivalenz der Aussagen (a) und (c) ist klar, da die Restklassen ja definitionsgemäß die Äquivalenzklassen der Kongruenz modulo m sind. Es verbleibt auch die Äquivalenz von (a) und (b) einzusehen. (a)=⇒(b). Da a modulo m zu b kongruent ist, existiert ein p ∈ Z mit a = b + pm. Dividiere nun b mit Rest durch m, d.h. schreibe b = qm + r mit q ∈ Z und dem Rest r ∈ Z mit 0 ≤ r < m. Dann ist auch a = b + pm = qm + r + pm = (p + q)m + r, d.h. r ist auch der Rest bei Division von a durch m. (b)=⇒(a). Sei r der gemeinsame Rest bei Division von a und b durch m. Dann existieren p, q ∈ Z mit a = pm + r =⇒ a − b = pm + r − qm − r = (p − q)m, b = qm + r und dies bedeutet m|a − b. Damit sind a und b kongruent modulo m. In anderen Worten entsprechen die Restklassen modulo m, d.h. die Äquivalenzklassen der Kongruenz modulo m, genau den möglichen Resten bei Division durch m, also den Zahlen 0, 1, 2, . . . , m − 1. Folglich gibt es genau m Restklassen modulo m, nämlich [0], [1], . . . , [m − 1]. Nehmen wir beispielsweise konkret m = 2, so sind die beiden Kongruenzklassen modulo 2 die Menge der geraden und die Menge der ungeraden Zahlen. 1.3.1 Operationen auf den Restklassen Wir wollen jetzt eine Addition und eine Multiplikation auf den Restklassen modulo einer Zahl m einführen. Dies geschieht indem zu zwei gegebenen Restklassen [a], [b] (a, b ∈ Z) Summe und Produkt einfach als die Restklassen von Summe und Produkt der beiden Zahlen a und b eingeführt werden. Wir müssen uns allerdings davon überzeugen, dass dies überhaupt eine sinnvolle Definition ist. Die Repräsentanten a, b unserer Restklassen sind ja bei weitem nicht eindeutig festgelegt, anstellen von a, b hätten wir auch irgendwelche anderen Repräsentanten a0 , b0 nehmen können, und kriegen dann in der Regel auch andere Summen und Produkte a0 + b0 und a0 · b0 . Glücklicherweise ist dies nicht weiter tragisch, auch wenn die Zahlen a0 + b0 , a0 b0 verschieden von a + b beziehungsweise ab sind, so werden wir sehen, dass sie doch dieselben Restklassen modulo m definieren. Man spricht auch davon, dass unsere Definition der Summe und des Produktes von Restklassen wohldefiniert ist. 2-6 Mathematik für Informatiker B, SS 2012 Donnerstag 12.4 Lemma 1.10 (Addition und Multiplikation von Restklassen) Sei m ∈ N∗ . Die Operationen ⊕ und auf der Menge der Restklassen modulo m, definiert durch [a] ⊕ [b] := [a + b], [a] [b] := [a · b] für a, b ∈ Z, sind wohldefiniert. Beweis: Seien a, b, a0 , b0 ∈ Z mit [a] = [a0 ] und [b] = [b0 ]. Dann gelten a ≡ a0 mod m und b ≡ b0 mod m, und dies bedeutet m|a − a0 und m|b − b0 . Es folgen m|(a − a0 ) + (b − b0 ) = (a + b) − (a0 + b0 ) und m|(a − a0 )b + a0 (b − b0 ) = ab − a0 b + a0 b − a0 b0 = ab − a0 b0 , und dies bedeutet a + b ≡ a0 + b0 mod m und ab ≡ a0 b0 mod m. Damit ist tatsächlich [a + b] = [a0 + b0 ] und [ab] = [a0 b0 ]. Diese Operationen auf den Restklassen erlauben es uns in Zukunft einfach mit den Repräsentanten zu rechnen. Wir hatten bereits bemerkt das die verschiedenen Restklassen gerade den den möglichen Resten 0, 1, 2, . . . , m − 1 entsprechen, wir können also neue Operationen auf den Zahlen 0, 1, . . . , m − 1 folgendermassen definieren: a ⊕ b = (a + b) mod m, a b = (ab) mod m. Man spricht dann oft auch einfach von Modulo-Rechnen“. Wir wollen jetzt einige ” Beispiele besprechen. 1. Ist etwa m = 13, so sind 7 ⊕ 9 = 3 und 7 9 = 11. 2. Wir betrachten die Addition von vorzeichenlosen, 8-Bit langen Binärzahlen, zum Beispiel Binär Dezimal 1 0 0 1 1 0 0 1 + 1 1 0 0 0 0 1 1 153 = 0 1 0 1 1 1 0 0 = 92, + = 348. 195 Hier ist 348 = 92 + 256, die Addition der Binärzahlen erfolgt in diesem Beispiel also modulo 256 = 28 . Dies ist tatsächlich immer so, das Rechnen mit 8-Bit Zahlen ist gerade das Rechnen modulo 28 = 256. Entsprechend bedeutet Rechnen mit 16-Bit Zahlen dann modulo 216 = 65536, und entsprechend für 32-Bit und 64-Bit Zahlen. 2-7 Mathematik für Informatiker B, SS 2012 Donnerstag 12.4 3. Auch das Rechnen modulo kleinerer Zweierpotenzen läßt sich leicht durchführen. Als ein Beispiel nehmen wir das Rechnen modulo 8 = 23 . Eine 8-Bit Binärzahl a7 . . . a0 ist gleich a0 + 2a1 + 4a2 + 23 a3 + · · · + 27 a7 , d.h. die hinteren Summanden zu a3 , . . . , a7 sind alle durch 8 teilbar. Modulo 8 ist unsere Zahl also gleich 00000a2 a1 a0 . Die Restklasse modulo 8 ist also durch die hinteren drei Bits gegeben, und kann beispielsweise durch bitweises und“ mit 00000111 = 7 berechnet ” werden, also r = n&7 in C. Entsprechendes gilt für höhere Zweierpotenzen und 16,32 und 64-Bit Zahlen. 4. Als ein weiteres Beispiel wollen wir die Ihnen schon aus der Schule bekannte Regel zur Teilbarkeit durch 3 diskutieren. Diese Regel besagt das eine natürliche Zahl genau dann durch Drei teilbar ist, wenn ihre Quersumme durch Drei teilbar ist. Ist n ∈ N∗ im Dezimalsystem als n = ar ar−1 . . . a1 a0 geschrieben, so ist explizit n = a0 + 10 · a1 + 102 · a2 + · · · + 10r · ar . Modulo 3 ist jetzt 10 ≡ 1 mod 3, also [10] = [1]. Damit ist [n] = a0 + 10 · a1 + 102 · a2 + · · · + 10r · ar = [a0 ] ⊕ [10] [a1 ] ⊕ [10]2 [a2 ] ⊕ · · · ⊕ [ar ] [10]r = [a0 ] + [a1 ] + [a2 ] + · · · + [ar ] = [a0 + · · · + ar ], und a0 + a1 + · · · + ar ist gerade die Summe der Dezimalziffern von n, also die Quersumme von n, d.h. die Zahl n ist modulo 3 gleich ihrer Quersumme. Insbesondere ist n genau dann durch 3 teilbar wenn die Quersumme dies ist. Nehmen wir etwa konkret die Zahl n = 17597032 mit Quersumme 1 + 3 + 7 + 9 + 5 + 7 + 2 = 34, so sehen wir das 17597032 bei Division durch 3 den Rest 1 hat da 34 ≡ 1 mod 3 ist. Da auch 10 ≡ 1 mod 9 gilt, ist n auch genau dann durch 9 teilbar wenn die Quersumme dies ist. Im Zahlenbeispiel hat n = 17597032 bei Division durch 9 den Rest 7 da 34 ≡ 7 mod 9 ist. 5. Mit der Überlegung des vorigen Beispiels läßt sich auch schnell eine Bedingung für die Teilbarkeit durch 11 herleiten. Modulo 11 ist 10 ≡ −1 mod 11, also ist analog zur obigen Rechnung für eine Dezimalzahl n = ar . . . a0 auch n ≡ a0 − a1 + a2 − · · · + (−1)r ar mod 11. Auf der rechten Seite steht hier die sogenannte alternierende Quersumme, also die mit wechselnden Vorzeichen gebildete Quersumme. Zum Beispiel ist für n = 17597032 die alternierende Quersumme 2 − 3 + 0 − 7 + 9 − 5 + 7 − 1 = 2, also ist n nicht durch 11 teilbar und hat bei Division durch 11 den Rest 2. Als Teilbarkeitsregel durch 11 ergibt sich also, dass eine Zahl genau dann durch 11 teilbar ist wenn ihre alternierende Quersumme durch 11 teilbar ist. 2-8