# Diskrete Mathematik - Lab 1 - Modulares rechnen * Gruppe Nummer 12: Schupp, Sybille; Pfeiffer, Felix; Bubeck, Jannik ## Laboraufgabe 1 ### 1.1 $ggT(24140,16762)$ $24140 = 1 \cdot 16762 + 7378$ $16762 = 2 \cdot 7378 + 2006$ $7378 = 3 \cdot 2006 + 1360$ $2006 = 1 \cdot 1360 + 646$ $1360 = 2 \cdot 646 + 68$ $646 = 9 \cdot 68 + 34$ $68 = 2 \cdot 34 + 0$ $ggT(24140,16762) = 34$ ### 1.2 $ggT(4655,12075)$ als Linearkombination #### ggT mit Euklidischem Algorithmus berechnen $12075 = 2 \cdot 4655 + 2765$ $4655 = 1 \cdot 2765 + 1890$ $2765 = 1 \cdot 1890 + 875$ $1890 = 2 \cdot 875 + 140$ $875 = 6 \cdot 140 + 35$ $140 = 4 \cdot 35 + 0$ $ggT(4655,12075) = 35$ #### Rückrechnung $35 = 875 - 6 \cdot 140 = 875 - 6\cdot (1890 - 2 \cdot 875)$ $~~~~ = -6 \cdot 1890 + 13 \cdot 875 = -6 \cdot 1890 + 13 \cdot (2765 - 1 \cdot 1890)$ $~~~~ = 13 \cdot 2765 - 19 \cdot 1890 = 13 \cdot 2765 - 19 \cdot (4655 - 1 \cdot 2765)$ $~~~~ = -19 \cdot 4655 + 32 \cdot 2765 = -19 \cdot 4655 + 32 \cdot (12075 - 2 \cdot 4655)$ $~~~~ = 32 \cdot 12075 - 83 \cdot 4655$ $ggT(4655,12075) = 35 = 32 \cdot 12075 - 83 \cdot 4655$ ### 1.3 **a)** $7 \cdot 4 - 21 \cdot 6 \equiv 2 \cdot 4 + 4 \cdot 1 = 8 + 4 \equiv 3 + 4 = 7 \equiv 2 \mod 5$ **b)** $17 \cdot 5 + 13 \cdot 11 \equiv 8 \cdot 5 + 4 \cdot 2 = 40 + 8 \equiv 4 + 8 = 12 \equiv 3 \mod 9$ **c)** $6 \cdot 14 - 9 \cdot 7 \equiv 6 \cdot 3 - 9 \cdot 7 = 18 - 63 \equiv 7 + 3 = 10 \mod 11$ ### 1.4 #### a) $18 \mod 49 ##### Schritt 1: ggT(18,49) berechnen $49 = 2 \cdot 18 + 13$ $18 = 1 \cdot 13 + 5$ $13 = 2 \cdot 5 + 3$ $5 = 1 \cdot 3 + 2$ $3 = 1 \cdot 2 + 1$ $2 = 2 \cdot 1 + 0$ $ggT(18,49) = 1$ ##### Schritt 2: Rückrechnung für Vielfachsumme $1 = 3 - 1 \cdot 2 = 3 - 1 \cdot (5 - 1 \cdot 3)$ $~~= -1 \cdot 5 + 2 \cdot 3 = 1 \cdot 5 + 2 \cdot (13 - 2 \cdot 5)$ $~~= 2 \cdot 13 - 5 \cdot 5 = 2 \cdot 13 - 5 \cdot (13 - 1 \cdot 13)$ $~~= -5 \cdot 18 + 7 \cdot 13 = -5 \cdot 18 + 7 \cdot (49 - 2 \cdot 18)$ $~~= 7 \cdot 49 - 19 \cdot 18$ $a=18 ,n=49$ $\alpha = -19, \beta = 7$ ##### Schritt 3: Inverse berechnen $\alpha = -19 < 0$ --> $a' = \alpha + n = -19 + 49 = 30$ #### b) $3 \mod 101$ ##### Schritt 1: ggT(3,101) berechnen $101 = 33 \cdot 3 + 2$ $~~~~~~= 1 \cdot 2 + 1$ $~~~~~~= 2 \cdot 1 + 0$ $ggT(3,101) = 1$ ##### Schritt 2: Rückrechnung für Vielfachsumme $1 = 3 - 1 \cdot 2 = 3 - 1 \cdot (101 - 33 \cdot 3)$ $~~ = -1 \cdot 101 + 34 \cdot 3$ $a= 3, n = 101$ $\alpha = 34, \beta = -1$ ##### Schritt 3: Inverse berechnen $\alpha = 34 > 0$ --> $a' = \alpha = 34$ #### c) $126 \mod 239$ ##### Schritt 1: ggT(126,239) berechnen $239 = 1 \cdot 126 + 113$ $126 = 1 \cdot 113 + 13$ $113 = 8 \cdot 13 + 9$ $13 = 1 \cdot 9 + 4$ $9 = 2 \cdot 4 + 1$ $4 = 4 \cdot 1 + 0$ $ggT(126,239) = 1$ ##### Schritt 2: Rückrechnung für Vielfachsumme $1 = 9 - 2 \cdot 4 = 9 - 2 \cdot (13 - 1 \cdot 9)$ $~~= -2 \cdot 13 + 3 \cdot 9 = -2 \cdot 13 + 3 \cdot (113 - 8 \cdot 13)$ $~~= 3 \cdot 113 - 26 \cdot 113 = 3 \cdot 113 - 26 \cdot (126 - 1 \cdot 13)$ $~~= -26 \cdot 126 + 29 \cdot 113 = 26 \cdot 126 + 29 \cdot (239 -1 \cdot 126)$ $~~=29 \cdot 239 - 55 \cdot 126$ $a = 126, n = 239$ $\alpha = -55, \beta = 29$ ##### Schritt 3: Inverse berechnen $\alpha = -55 < 0$ -->$a' = \alpha + n = -55 + 239 = 184$ ## Laboraufgabe 2 ### 2.1 Restklassenkonstruktion #### a,b) Restklassen $Z_4, Z_5, Z_7$ $Z_4$: ![](https://i.imgur.com/kRYcO8i.jpg) $Z_5$: ![](https://i.imgur.com/MzysyTm.jpg) $Z_7$: ![](https://i.imgur.com/XETYpcY.jpg) #### c) Anzahl Restklassen **Hinweis:** Jede Division ist als Ganzzahldivision zu verstehen. | $n = 4$ | $[0]_4$ | $[1]_4$ | $[2]_4$ | $[3]_4$ | | -------- | -------- | -------- | -------- | -------- | | -10 bis 10 | 5 | 5 | 6 | 5 | | -20 bis 20 | 11 | 10 | 10 | 10 | | -z bis z | $\frac{z*2}{n} \pm x, x \in \{0,1\}$ | $\frac{z*2}{n} \pm x, x \in \{0,1\}$ | $\frac{z*2}{n} \pm x, x \in \{0,1\}$ | $\frac{z*2}{n} \pm x, x \in \{0,1\}$ | | $n = 5$ | $[0]_5$ | $[1]_5$ | $[2]_5$ | $[3]_5$ |$[4]_5$ | | -------- | -------- | -------- | -------- | -------- | - | | -10 bis 10 | 5 | 4 | 4 | 4 |4 | -20 bis 20 | 9 | 8 | 8 | 8 |8 | -z bis z | $\frac{z*2}{n} \pm x, x \in \{0,1\}$ | $\frac{z*2}{n} \pm x, x \in \{0,1\}$ | $\frac{z*2}{n} \pm x, x \in \{0,1\}$ |$\frac{z*2}{n} \pm x, x \in \{0,1\}$| $\frac{z*2}{n} \pm x, x \in \{0,1\}$ | | $n = 7$ | $[0]_7$ | $[1]_7$ | $[2]_7$ | $[3]_7$ | $[4]_7$ | $[5]_7$ | $[6]_7$ | -------- | -------- | -------- | -------- | -------- | -------- | -------- | - | | -10 bis 10| 3 | 3 | 3 | 3 | 3 | 3 | 3 | -20 bis 20 | 5 | 6 | 6 | 6 | 6 | 6 |6 | -z bis z | $\frac{z*2}{n} \pm x, x \in \{0,1\}$ | $\frac{z*2}{n} \pm x, x \in \{0,1\}$ | $\frac{z*2}{n} \pm x, x \in \{0,1\}$ | $\frac{z*2}{n} \pm x, x \in \{0,1\}$ | $\frac{z*2}{n} \pm x, x \in \{0,1\}$ | $\frac{z*2}{n} \pm x, x \in \{0,1\}$ | $\frac{z*2}{n} \pm x, x \in \{0,1\}$ | ### 2.2 Repräsentantensystem #### a,b) Repräsentantensystem von $Z_4$ ![](https://i.imgur.com/nffK95a.jpg) #### c) Repräsentantensystem $Z_7$ $\{−23, −6, −3, 2, 7, 10\}$ ist kein Repräsentantensystem von $Z_7$, da es nur 6 Elemente hat, ein Repräsentantensystem von $Z_7$ benötigt aber genau 7 Elemente. $\{-23, -6 -3, 2, 7, 10, 20\}$ wäre ein Repräsentantensystem von $Z_7$. $\{−16, −9, −2, 5, 12, 19, 26\}$ - Dies ist kein Repräsentantensystem sondern die Restklasse $[5]_7$, da alle Elemente in der Division mit 7, Rest 5 ergeben. Da bereits mehrere Elemente Rest 5 ergeben lässt sich kein gültiges Repräsentantensystem mehr bilden. #### d) Repräsentantensystem $Z_5$ $\{-1, -2, 2, 6, 10\}$ Nachweis: Wir brauchen Zahlen, die Reste von 0-4 liefern. - -1 --> Rest 4 - -2 --> Rest 3 - 2 --> Rest 2 - 6 --> Rest 1 - 10 --> Rest 0 Das ist bei uns gegeben --> es handelt sich um ein Repräsentantensystem. #### 2.3 Programm ```Python from funktionen import inverse print("Gebe a an:") a = int(input()) print("Gebe b an:") b = int(input()) print("Gebe n an:") n = int(input()) print(f"Teiler: {n}") z1, z2, z3, z4 = a + b, a - b, a * b, a / b if b != 0 else None r1, r2, r3, r4 = z1 % n, z2 % n, z3 % n, z4 % n if z4 else None print(f"a + b = {a + b}, a - b = {a - b}, a * b = {a * b}" + f", a / b = / {a / b}" if z4 else "") restklassen = [[] for x in range(n)] restklassen[0].append(0) for x in range(1, 100): restklassen[x % n].append(x) restklassen[-x % n].append(-x) for p in range(len(restklassen)): restklassen[p].sort() print(f"Restklasse für a + b mod n = {z1} mod {n} = {r1}: [{','.join(str(x)/ for x in restklassen[r1])}]") print(f"Restklasse für a - b mod n = {z2} mod {n} = {r2}: [{','.join(str(x)/ for x in restklassen[r2])}]") print(f"Restklasse für a * b mod n = {z3} mod {n} = {r3}: [{','.join(str(x)/ for x in restklassen[r3])}]") inv = inverse(a, n) r4 = (b*inv) % n if inv: print(f"Restklasse für a / b mod n = a * inv mod n => {b*inv} mod {n} =/ {r4}: [{','.join(str(x) for x in restklassen[r4])}]") else: print("Restklasse für a/b nicht möglich")``` ``` ```Python # funktionen.py def ggT(z1, z2): groessere_Zahl, kleinere_Zahl = z1 if z1 > z2 else z2, z1/ if z1 < z2 else z2 b = kleinere_Zahl a = groessere_Zahl rest = a % b while rest != 0: a = b b = rest rest = a % b return b def vielfachsumme(a, b): g, k = a if a > b else b, a if a < b else b faktor_g1, faktor_k1 = _vielfachsumme_berechnen(g, k) faktor_k2, faktor_g2 = _vielfachsumme_berechnen(k, g) if faktor_g1 + faktor_k1 < faktor_g2 + faktor_k2: return faktor_g1, faktor_k1 * -1 else: return faktor_g2 * -1, faktor_k2 def _vielfachsumme_berechnen(a, b) -> (int, int): faktor_a, faktor_b = 1, 1 while faktor_a * a - faktor_b * b != 1: if faktor_a * a - faktor_b * b < 1: faktor_a += 1 else: faktor_b += 1 # print(f"{a}*{faktor_a} - {b}*{faktor_b}") # print("Ergebnis: " + str(faktor_a * a - faktor_b * b)) return faktor_a, faktor_b def inverse(a, n): inverted = n > a if inverted: a, n = n, a ggt = ggT(a, n) if ggt != 1: return None alpha, beta = vielfachsumme(a, n) if inverted: n, a = a, n alpha, beta = beta, alpha return alpha % n if __name__ == "__main__": print(inverse(126, 239)) # 184 print("----") print(inverse(3, 101)) # 34 print("----") print(inverse(18, 49)) # 30 ```