diff --git a/miniprojekt1/zad1.py b/miniprojekt1/zad1.py new file mode 100644 index 0000000..628521d --- /dev/null +++ b/miniprojekt1/zad1.py @@ -0,0 +1,31 @@ +# zad 1 - odwrotność w grupie fi +n = int(input("Podaj n -> fi(n): ")) +b = int(input("Podaj b -> liczbę: ")) + +x = 1 +y = 0 +def eulkides(a, b): + global x + global y + if (b != 0): + eulkides(b, a % b) + pom = y + y = int(x - a // b * y) + #print("y = {} - {} / {} * {}, x = {}".format(x, a, b, pom, pom)) + x = int(pom) + +wynik = 0 +found = False +for i in range(1, n): + wynik = (i * b) % n + if wynik == 1: + x, y = 1, 0 + eulkides(n, wynik) + if n * x + wynik * y == 1: + found = True + wynik = i + break +if found: + print("Liczba odwrotna do {}, to: {}".format(b, wynik)) +else: + print("Liczba odwrotna nie istnieje") \ No newline at end of file diff --git a/miniprojekt1/zad2.py b/miniprojekt1/zad2.py new file mode 100644 index 0000000..043a626 --- /dev/null +++ b/miniprojekt1/zad2.py @@ -0,0 +1,15 @@ +# zad 2 - potęgowanie +def potegowanieimod(b, k, n): + y = 1 + while k > 0: + if k & 1: + y = y*b % n + b = b**2 % n + k = k >> 1 + return y + +b = int(input("Podaj b -> liczbę potęgowaną: ")) +k = int(input("Podaj k -> potęgę: ")) +n = int(input("Podaj n -> modulo: ")) + +print(potegowanieimod(b, k, n)) \ No newline at end of file diff --git a/miniprojekt1/zad3.py b/miniprojekt1/zad3.py new file mode 100644 index 0000000..a3dff16 --- /dev/null +++ b/miniprojekt1/zad3.py @@ -0,0 +1,26 @@ +import random + +# Test fermata - snrawdzanie czy liczba jest nierwsza + +def potegowanieimod(b, k, n): + y = 1 + while k > 0: + if k & 1: + y = y*b % n + b = b**2 % n + k = k >> 1 + return y + + +def fermat(k, n): + i = 0 + while i < k: + a = random.randint(1, n - 1) + if potegowanieimod(a, (n - 1), n) == 1: + i = i + 1 + else: + return False + return True + +n = int(input("Podaj liczbę do sprawdzenia: ")) +print("Liczba jest pierwsza: {}".format(fermat(100, n))) \ No newline at end of file diff --git a/miniprojekt1/zad4.py b/miniprojekt1/zad4.py new file mode 100644 index 0000000..8c57600 --- /dev/null +++ b/miniprojekt1/zad4.py @@ -0,0 +1,29 @@ +# reszta kwadratowa + +a = int(input("Podaj a -> liczba do sprawdzenia: ")) +p = int(input("Podaj p -> liczba pierwsza modulo: ")) + + +def potegowanieimod(b, k, n): + y = 1 + while k > 0: + if k & 1: + y = y*b % n + b = b**2 % n + k = k >> 1 + return y + + +#Symbol Legendre'a +l = potegowanieimod(a, (p-1)//2, p) + +if l == 0: + print("a jest wielokrotnością p") +elif l == 1: + print("a jest resztą kwadratową") +else: + print("a nie jest resztą kwadratową") + + +# reszta kwadratowa to takie a ze istnieje x nalezące do Zp +# x^2 = a (mod p) \ No newline at end of file diff --git a/miniprojekt1/zad5.py b/miniprojekt1/zad5.py new file mode 100644 index 0000000..4dc5521 --- /dev/null +++ b/miniprojekt1/zad5.py @@ -0,0 +1,23 @@ +# obliczyć pierwiastek kwadratowy w fi + +p = int(input("Podaj p -> liczba pierwsza modulo: ")) +b = int(input("Podaj b -> reszta kwadratowa: ")) + + +def potegowanieimod(b, k, n): + y = 1 + while k > 0: + if k & 1: + y = y*b % n + b = b**2 % n + k = k >> 1 + return y + + +for i in range(1, p): + a = potegowanieimod(i, (p-1)//2, p) + if a == b: + print("Result: {}".format(i)) + + +#dane testowe to p=5 i b=4 \ No newline at end of file diff --git a/zajecia1/euklides.py b/zajecia1/euklides.py index 720db4e..b2656c2 100644 --- a/zajecia1/euklides.py +++ b/zajecia1/euklides.py @@ -1,2 +1,18 @@ -#rozszerzony algorytm euklidesa +#rozszerzony algorytm euklidesa - rekurencyjny + +x = 1 +y = 0 +def eulkides(a, b): + global x + global y + if (b != 0): + eulkides(b, a % b) + pom = y + y = int(x - a // b * y) + print("y = {} - {} / {} * {}, x = {}".format(x, a, b, pom, pom)) + x = int(pom) + + +eulkides(5, 4) +print("4 * {} + 5 * {}".format(x, y)) diff --git a/zajecia2/test-fermata.py b/zajecia2/test-fermata.py index e69de29..2ad81d5 100644 --- a/zajecia2/test-fermata.py +++ b/zajecia2/test-fermata.py @@ -0,0 +1,14 @@ +# test fermata +import random + +def fermat(k, p): + i = 0 + while i < k: + a = random.randint(1, p - 1) + if pow(a, (p - 1), p) == 1: + i = i + 1 + else: + return False + return True + +print(fermat(10, 79)) \ No newline at end of file