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