Prof. Dr. Gerhard Berendt SS 2005 Mathematische Grundlagen der Codierung / Endliche Strukturen Arbeitsblatt 3 / S. 1 von 4 Die EULERsche -Funktion. Wie in der Analysis Abbildungen aus R nach R , existieren auch in der Zahlentheorie Funktionen, deren Definitionsbereich die Menge der ganzen Zahlen oder eine Teilmenge davon ist, und deren Wertevorrat aus ganzen (oder auch reellen) Zahlen besteht. Eine in der elementaren Zahlentheorie häufig benutzte derartige Funktion ist die EULERsche -Funktion. Definition 3.1: Die Funktion N N : (n): = Anzahl der Zahlen 0 < k < n mit ggT(k,n) = 1 wird als EULERsche - (Totient-) Funktion bezeichnet. Folgerungen: a) Für eine Primzahl p gilt (p) = p – 1 . b) Für eine Primzahlpotenz p k gilt (p k) = p k – p k-1 = p k (1 – 1/p) . (Die Anzahl der Zahlen zwischen 0 und p k – 1, die nicht relativ prim zu p k sind, sind genau diejenigen, die durch p teilbar sind, und davon gibt es p k-1.) Eine wichtige Eigenschaft der -Funktion wird durch den folgenden Satz beschrieben: Satz 3.2: Seien a und b positiv ganz und relativ prim, dann gilt (ab) = (a) (b). Beweis: (ab) ist die Anzahl der ganzen Zahlen zwischen 0 und ab – 1, die keinen gemeinsamen Faktor mit a b besitzen. Sei für jedes j in diesem Bereich j1 der kleinste nicht-negative Rest modulo a und j2 der kleinste nicht-negative Rest modulo b. Aus dem Chinesischen Restsatz folgt, daß es für jedes Paar j1 , j2 genau ein j zwischen 0 und ab – 1 gibt, für das j j1 mod a und j j2 mod b gilt. j hat genau dann keinen gemeinsamen Faktor mit a b, wenn es keinen gemeinsamen Faktor mit a hat (was äquivalent damit ist, daß j1 keinen gemeinsamen Faktor mit a besitzt) und wenn es keinen gemeinsamen Faktor mit b hat (was äquivalent damit ist, daß j2 keinen gemeinsamen Faktor mit b besitzt). Daher sind die zu zählenden Werte von j eineindeutig zugeordnet den Paaren j1 , j2 mit 0 j1 <a , ggT( j1 , a) = 1 und 0 j2 <b , ggT( j2 , b) = 1. Davon jedoch gibt es (a) (b). Prof. Dr. Gerhard Berendt SS 2005 Mathematische Grundlagen der Codierung / Endliche Strukturen Arbeitsblatt 3 / S. 2 von 4 Da jede Zahl n als Produkt von Primzahlpotenzen geschrieben werden kann, die jeweils teilerfremd zueinander sind, folgt aus (p k) = p k – p k-1 = p k (1 – 1/p) für k k k n p1 1 p2 2 pr r : 1 (n) n 1 p p| n . Eine weitere nützliche Eigenschaft der EULER-Funktion formuliert Satz 3.3: Sei n eine natürliche Zahl. Dann gilt ( d ) n . d |n Hierbei ist die Summe über alle Teiler d von n (inklusive 1 und n) zu bilden. Der Beweis dieses Satzes benutzt die Multiplikativität der EULER-Funktion und kann z.B. bei Koblitz, N.: "A Course in Number Theory and Cryptography", Springer Verlag 1987 nachgelesen werden. Beispiel: Sei n = 30. Dann sind die Teiler von n die Zahlen 1, 2, 3, 5, 6, 10, 15 und 30, und es ist (1) (2) (3) (5) (6) (10) (15) (30) 11 2 4 2 4 8 8 30 Im folgenden sind einige Werte der EULER-Funktion notiert: n 1 2 3 4 5 6 7 8 9 10 30 31 32 50 100 (n) 1 1 2 2 4 2 6 4 6 4 8 30 16 20 40 Während die hier notierten Aussagen die Berechnung der EULERschen -Funktion für Zahlen, deren Faktorisierung bekannt ist oder leicht ermittelt werden kann, ohne großen Aufwand ermöglichen, trifft dies nicht für (große) Zahlen zu, deren Zerlegung in Primfaktoren (oder zumindest teilerfremde Faktoren) nicht bekannt ist. Diese Feststellung gewinnt u.a. in der Kryptologie an Bedeutung. Prof. Dr. Gerhard Berendt SS 2005 Mathematische Grundlagen der Codierung / Endliche Strukturen Arbeitsblatt 3 / S. 3 von 4 Die Sätze von FERMAT und EULER. Für den Fall, dass der Modul eine Primzahl p ist, ist die Menge Z / pZ ein Körper und daher die Menge {1, 2, 3, ...p-1} eine endliche abelsche Gruppe. Sukzessive Multiplikation etwa eines Elementes mit sich selbst führt mithin nicht aus der Menge heraus. Die Frage, ob, und ggf. wann auf diese Weise wieder die 1 erreicht wird, beantwortet der so genannte kleine Satz von FERMAT, der sich als Spezialfall eines Satzes von EULER ergibt. Satz 3.4 (Satz von Euler): Seien n, a N und (n) die Anzahl der zu n teilerfremden Zahlen kleiner als n (EULERsche -Funktion). Dann gilt für teilerfremde Zahlen a und n : a (n) = 1 mod n. Beweis: Seien r1 , r2 , . . . r (n) die zu n teilerfremden Zahlen kleiner als n. Dann sind n.V. auch die Zahlen ar1 , ar2 , . . . ar (n) teilerfremd zu n, und, wie die ri sämtlich in verschiedenen Restklassen modulo n . Das bedeutet aber, daß modulo n jedes ari gleich einem rj sein muß, und damit ar1 ar2 . . . ar (n) = a(n) r1 r2 . . . r (n) = r1 r2 . . . r (n) mod n gilt. Da sämtliche ri teilerfremd zu n sind, kann durch ihr Produkt dividiert werden, und es folgt die Behauptung. Als Folgerung aus dem Satz von EULER erhält man sofort den Satz 3.5 (Satz von FERMAT): Sei p eine Primzahl. Dann gilt für jede ganze Zahl a , daß a p = a mod p, und für jedes nicht durch p dividierbare a, daß a p-1 = 1 mod p ist. Beweis: Da p eine Primzahl ist, gilt (p) = p - 1. Hieraus folgt sofort die zweite Aussage. Die erste Aussage ist trivial, wenn a durch p teilbar ist, andernfalls folgt sie, da für alle a gilt, daß a = a mod p ist. Als Korollar folgt Prof. Dr. Gerhard Berendt SS 2005 Mathematische Grundlagen der Codierung / Endliche Strukturen Arbeitsblatt 3 / S. 4 von 4 Korollar 3.6: Falls a nicht durch p teilbar ist, und für n m mod (p - 1) gilt, ist a n = a m mod p . Beweis: Sei n > m . Da p - 1 | n – m, ist n = m + c (p – 1) für ein positives ganzes c. Multipliziert man nun die Kongruenz a p-1 = 1 mod p c mal mit sich selbst und danach mit a m = a m mod p , dann erhält man das gewünschte Resultat a n = a m mod p . Diese Sätze sind u.a. die Grundlage für die Berechnung großer Primzahlen. Da der naive Algorithmus zur Berechnung von Potenzen für große Exponenten e jedoch einen Rechenaufwand von O(e) - maximal O(m) mit m als Modul - erfordert, benötigt man für die Potenzierung in Restklassen (mit großem Modul) einen schnelleren Algorithmus. Dazu nutzt man die Darstellung des Exponenten im Binärsystem und reduziert bei jeder Multiplikation modulo m: Algorithmus 3.7 zur Berechnung von a e mod m (Potenzierung in Restklassen): 1. Setze p = 1, q = e. 2. Falls q = 0 ist, gib p aus und beende den Algorithmus. 3. Setze r = q mod 2, q = q / 2. Falls r = 1 ist, setze p = p a mod m. 4. Setze p = p 2 mod m. Gehe zu 2. Dieser Algorithmus enthält O(log e) Schritte und in jedem Schleifenschritt eine Division und zwei Multiplikationen und damit maximal O(log3 m) Binäroperationen. Der Algorithmus 4.7 ist also für große Exponenten um ein Vielfaches schneller als die sukzessive Ausführung der Multiplikationen der Basis. Aufgabe: Implementieren Sie den Algorithmus in einer Ihnen geläufigen höheren Programmiersprache.