def test_zero(self): self.assertEqual(gcd(0, 0, 0), 0) self.assertEqual(gcd(3, 0, 0), 3) self.assertEqual(gcd(0, 6, 0), 6) self.assertEqual(gcd(0, 0, 9), 9) self.assertEqual(gcd(2, 4, 0), 2) self.assertEqual(gcd(3, 0, 6), 3) self.assertEqual(gcd(0, 4, 8), 4)
def test_common(self): self.assertEqual(gcd(42, 56, 112), 14) self.assertEqual(gcd(461952, 116298, 10314), 18) self.assertEqual(gcd(7966496, 314080416, 98208), 32) self.assertEqual(gcd(24826148, 45296490, 7523378), 526)
def test_negative(self): self.assertEqual(gcd(81, 21, -18), 3) self.assertEqual(gcd(64, -32, 40), 8) self.assertEqual(gcd(-99, 66, 18), 3)
# programik odtwarza system podpisow cyfrowych elgamala import odwrotnosc #parametry poczatkowe: p = 13 #dowolna liczba pierwsza g = 2 # dowolny generator grupy multiplikatywnej p (mozna wyznaczyc w programie main.py) x = 3 # tajny klucz prywatny -- dowolny z przedziału <2, p-2> m = 4 # wiadomość -- dowolna z przedziału <0, p-2> k = 5 # potrzebujemy liczby k, ktora jest kopierwsza z p-1 -- czyli gcd(k,p-1) = 1 -- patrz main.py #parametry^^^ from main import gcd if gcd(k, p - 1) > 1: print(f'k: {k} nie jest liczba kopierwsza z {p-1}') raise Exception y = (g**x) % p #klucz publiczny print(f'klucz publiczny: {y}') # podpis jest para liczb a i b # liczymy liczbe odwrotna do k w pierscieniu p-1 k_odwrotnosc = odwrotnosc.odwrotnosc_modulo(k, p - 1) # w koncu wyznaczmy a a = (g**k) % p #oraz b b = (k_odwrotnosc * (m - (x * (a % (p - 1))) % (p - 1)) % (p - 1)) % (p - 1) print(f'a: {a}') print(f'b: {b}') #### sprawdzenie czy sie zgadza podpis#######
def test(self): self.assertEqual(main.gcd(63, 36), 9) self.assertEqual(main.gcd(36, 63), 9)