Skip to content
Snippets Groups Projects
Commit 7e41d528 authored by jonas.stirnema's avatar jonas.stirnema
Browse files

Broken v2 from polycop eggen

parent 779c07b2
No related tags found
No related merge requests found
...@@ -27,7 +27,6 @@ def exp_rapide(nb: int, exp: int, mod: int) -> int: ...@@ -27,7 +27,6 @@ def exp_rapide(nb: int, exp: int, mod: int) -> int:
return out % mod return out % mod
if __name__ == '__main__': if __name__ == '__main__':
u = 68393426 u = 68393426
......
...@@ -15,38 +15,86 @@ def is_prime_number(number): ...@@ -15,38 +15,86 @@ def is_prime_number(number):
return False return False
return True return True
def is_probably_prime(number):
def is_probably_prime(n, k):
""" Check wether a number is probably prime """ Check wether a number is probably prime
Miller Rabin Primality Test Miller Rabin Primality Test
FERMAT DIT a^(p−1) = 1 mod p. V2
SOURCES:
http://defeo.lu/in420/DM3%20-%20Test%20de%20Miller-Rabin
https://www.geeksforgeeks.org/primality-test-set-3-miller-rabin/
https://fr.wikipedia.org/wiki/Test_de_primalit%C3%A9_de_Miller-Rabin
""" """
if number == 1: # 1 is not prime from random import randint
if n == 1: # 1 is not prime
return False return False
if number == 2: # 2 is a prime number if n == 2: # 2 is a prime n
return True return True
if number > 2 and number % 2 == 0: # even numbers are not prime if not n & 0x01: # even numbers are not prime
return False return False
d = ((number - 1) & -(number - 1)).bit_length() - 1 # Get the number of witness we need # Get the number of witness we need
r = int((number - 1) / 2**d) # Rest after factors of 2 # Number of trailing zeroes in the binary representation of n-1
for i in range(5): # n - 1 = 2**n * n
if ( test_rabin(number, r, d)) == False: s = ((n - 1) & -(n - 1)).bit_length() - 1
return False d = int((n - 1) / 2**s)
return True # PASSED D WITNESSES - PROBABLY PRIME
# CHECK A RANDOM NUMBER AS WITNESS for i in range(1, n):
def test_rabin(number, r, d): x = 2 + randint(1, n-4)
from math import log2 y = pow(x, d, n)
from random import randint if y != 1 and y != n - 1:
for r in range(1, s - 1):
y = pow(y, 2, n)
if y == n - 1:
break
if y != 1:
return False
return True # Probably Prime
# def is_probably_prime(number):
# """ Check wether a number is probably prime
# Miller Rabin Primality Test
# FERMAT DIT a^(p−1) = 1 mod p.
# SOURCES:
# http://defeo.lu/in420/DM3%20-%20Test%20de%20Miller-Rabin
# https://www.geeksforgeeks.org/primality-test-set-3-miller-rabin/
# https://fr.wikipedia.org/wiki/Test_de_primalit%C3%A9_de_Miller-Rabin
# """
# if number == 1: # 1 is not prime
# return False
# if number == 2: # 2 is a prime number
# return True
# if number > 2 and number % 2 == 0: # even numbers are not prime
# return False
# d = ((number - 1) & -(number - 1)).bit_length() - 1 # Get the number of witness we need
# r = int((number - 1) / 2**d) # Rest after factors of 2
# for i in range(5):
# if ( test_rabin(number, r, d)) == False:
# return False
# return True # PASSED D WITNESSES - PROBABLY PRIME
# # CHECK A RANDOM NUMBER AS WITNESS
# def test_rabin(number, r, d):
# from exp_rapide import power
# from math import log2
# from random import randint
# a = 2 + randint(1, number-4) # Get random a in 3..p-2 > not smaller than 4
# # for i in range(0, d):
# # tested = power(a, (r * power(2, i, number)), number) #a**(r*2**i) % number
# # if tested == 1 or tested == number-1:
# # # return True # a is not witness of Miller-Rabin
# tested = power(a, r, number)
# if tested == 1 or tested == number-1:
# return True # a is not witness of Miller-Rabin
a = randint(3, number-2) # Get random a in 3..p-2 # while (d != number - 1):
for i in range(0, d): # tested = (tested * tested) % number;
tested = a**(r*2**i) % number # d *= 2;
if tested == 1 or tested == number-1: # if tested == 1 or tested == number-1:
return True # a is not witness of Miller-Rabin # return True # a is not witness of Miller-Rabin
return False # Number is not prime # return False # Number is not prime
\ No newline at end of file #
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment