33 lines
734 B
Python
33 lines
734 B
Python
import gmpy2
|
|
from gmpy2 import mpz, random_state, mpz_random, powmod
|
|
|
|
def is_prime_fermat(n, k=5):
|
|
n = mpz(n)
|
|
|
|
if n <= 1:
|
|
return False
|
|
if n == 2:
|
|
return True
|
|
if n % 2 == 0:
|
|
return False
|
|
|
|
rand_state = random_state()
|
|
|
|
for _ in range(k):
|
|
a = mpz_random(rand_state, n - 3) + 2
|
|
result = powmod(a, n - 1, n)
|
|
if result != 1:
|
|
return False
|
|
return True
|
|
|
|
n_input = input("Podaj liczbę n do przetestowania: ")
|
|
try:
|
|
n = mpz(n_input)
|
|
except ValueError:
|
|
print("Błędne dane: n musi być liczbą całkowitą.")
|
|
exit()
|
|
|
|
if is_prime_fermat(n):
|
|
print(f"{n} jest prawdopodobnie liczbą pierwszą.")
|
|
else:
|
|
print(f"{n} jest liczbą złożoną.") |