Otto-von-Guericke-Universität Magdeburg Institut für Analysis und Numerik Prof. Dr. T. Richter, Dipl.-Math. K. Simon 07.12.2016 Algorithmische Mathematik I (WS 2016/17) Übungsblatt 9 abzugeben: Aufgaben 3(b) und 5 am 04.01.2017 vor der Vorlesung 1. Beweisen Sie folgende Aussagen für einen beliebigen Modul m ∈ N : S a) Z = m−1 k=0 k := 0 ∪ 1 ∪ · · · ∪ m − 1, b) k ∩ ` = ∅ ∀ 0 ≤ k < ` ≤ m − 1. 2. Entwickeln Sie für natürliche Zahlen z ∈ N mit der Dezimaldarstellung n X z = (an . . . a1 a0 )10 = a0 + ak · 10k k=1 einen einfachen Formelausdruck F (a0 , . . . , an ) aus den Ziffern von z für die Bestimmung des Restes bei der Division von z durch 8, so dass also gilt z ≡ F (a0 , . . . , an ) mod 8 ∀ z ∈ N. 3. Beweisen Sie, a) dass das Produkt z = a(a + 1)(a + 2)(a + 3) für jede beliebige natürliche Zahl a ∈ N durch 12 teilbar ist. Hinweis: Analysieren Sie die Restklasse jedes Faktors im Produkt modulo geeigneter Primzahlen. b) (5 Punkte) dass das Produkt z = (a + 24)(a + 1)(a + 2)(a + 2016)(a − 312 )(a − 12)(a + 20)(a + 162 ) für jede beliebige natürliche Zahl a ∈ N durch 1260 teilbar ist. c) Wie groß muss n mindestens sein, damit das Produkt z = (a + c1 ) . . . (a + cn ) mit gegebenen festen ci , i = 1, . . . , n für beliebiges a ∈ N durch pk teilbar ist, wobei p eine Primzahl und k ∈ N ist. Geben Sie eine Möglichkeit für die c1 bis cn an. 4. Sei p ∈ N eine Primzahl. Ein Element a ∈ Z/pZ heißt Primitivwurzel, falls gilt: p−1 [ ak = Z/pZ \ {0}. k=0 Untersuchen Sie, ob und wann 0 bzw. 1 Primitivwurzel sind, und schreiben Sie unter Verwendung der Programmiermaske ’primitiv wurzeln.c’ (siehe Web–Seite für die Übungen) ein naives Programm, dass alle Primitivwurzeln in Z/pZ bestimmt und ausgibt. 1 5. (5 Punkte) Erweitern Sie das Programm ’primitiv wurzeln.c’, welches in den Übungen zu Aufgabe 4 erstellt wurde, um die folgende Funktionalität. Nach der Ausgabe aller Primitivwurzeln soll der Nutzer die Möglichkeit bekommen, eine dieser Primitivwurzeln a ∈ Z/pZ auszuwählen sowie ein beliebiges Element b ∈ Z/pZ \ {0} anzugeben (jeweils über die Werte der Repräsentanten a, b ∈ {0, 1, . . . , p − 1}). Danach soll eine Funktion ’get discrete log’ aufgerufen werden, die über die Anweisung k = get discrete log(a,b,p); den sogenannten diskreten Logarithmus von b zur Basis a bestimmt, d.h. diejenige Zahl k ∈ {0, 1, . . . , p − 1}, für die gilt ak = b in Z/pZ. Dabei sollen die Variablen k, a, b, p jeweils vom Typ ’unsigned long’ sein. Anschließend soll im Hauptprogramm der Wert von k ausgegeben werden.