kryptografia/1/4.py

35 lines
739 B
Python

import gmpy2
from gmpy2 import mpz
def is_quadratic_residue(b, p):
b = mpz(b)
p = mpz(p)
if b % p == 0:
return True
e = (p - 1) // 2
result = gmpy2.powmod(b, e, p)
if result == 1:
return True
elif result == p - 1:
return False
else:
return False
p = mpz(11)
b_input = input("Podaj wartość b: ")
try:
b = mpz(b_input)
except ValueError:
print("Błędne dane: b musi być liczbą całkowitą.")
exit()
if b < 0 or b >= p:
print("Błędne dane: b musi być w zakresie 0 <= b < p.")
else:
if is_quadratic_residue(b, p):
print(f"{b} jest resztą kwadratową modulo {p}.")
else:
print(f"{b} nie jest resztą kwadratową modulo {p}.")