miniegzamin

This commit is contained in:
Jakub Adamski 2021-10-27 20:51:05 +02:00
parent 679051f3a9
commit 7abd0ba044
7 changed files with 155 additions and 1 deletions

31
miniprojekt1/zad1.py Normal file
View File

@ -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")

15
miniprojekt1/zad2.py Normal file
View File

@ -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))

26
miniprojekt1/zad3.py Normal file
View File

@ -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)))

29
miniprojekt1/zad4.py Normal file
View File

@ -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)

23
miniprojekt1/zad5.py Normal file
View File

@ -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

View File

@ -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))

View File

@ -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))