miniegzamin
This commit is contained in:
parent
679051f3a9
commit
7abd0ba044
31
miniprojekt1/zad1.py
Normal file
31
miniprojekt1/zad1.py
Normal 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
15
miniprojekt1/zad2.py
Normal 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
26
miniprojekt1/zad3.py
Normal 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
29
miniprojekt1/zad4.py
Normal 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
23
miniprojekt1/zad5.py
Normal 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
|
@ -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))
|
||||||
|
|
||||||
|
@ -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))
|
Loading…
Reference in New Issue
Block a user