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
Branches
Tags
No related merge requests found
......@@ -27,7 +27,6 @@ def exp_rapide(nb: int, exp: int, mod: int) -> int:
return out % mod
if __name__ == '__main__':
u = 68393426
......
......@@ -15,38 +15,86 @@ def is_prime_number(number):
return False
return True
def is_probably_prime(number):
def is_probably_prime(n, k):
""" 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
V2
"""
if number == 1: # 1 is not prime
from random import randint
if n == 1: # 1 is not prime
return False
if number == 2: # 2 is a prime number
if n == 2: # 2 is a prime n
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
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
# Get the number of witness we need
# Number of trailing zeroes in the binary representation of n-1
# n - 1 = 2**n * n
s = ((n - 1) & -(n - 1)).bit_length() - 1
d = int((n - 1) / 2**s)
# CHECK A RANDOM NUMBER AS WITNESS
def test_rabin(number, r, d):
from math import log2
from random import randint
for i in range(1, n):
x = 2 + randint(1, n-4)
y = pow(x, d, n)
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
for i in range(0, d):
tested = a**(r*2**i) % number
if tested == 1 or tested == number-1:
return True # a is not witness of Miller-Rabin
# while (d != number - 1):
# tested = (tested * tested) % number;
# d *= 2;
# if tested == 1 or tested == number-1:
# return True # a is not witness of Miller-Rabin
return False # Number is not prime
\ No newline at end of file
# return False # Number is not prime
#
\ 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