From 406bc4c39c6e4c3451472d54732fd7fd5a37eb0d Mon Sep 17 00:00:00 2001
From: "jonas.stirnema" <jonas.stirnemann@etu.hesge.ch>
Date: Fri, 21 Jan 2022 21:31:45 +0100
Subject: [PATCH] Update prime.py

---
 src/prime.py | 42 +++++++++++++++++++++++++++++++++++++-----
 1 file changed, 37 insertions(+), 5 deletions(-)

diff --git a/src/prime.py b/src/prime.py
index eb284d3..0315465 100644
--- a/src/prime.py
+++ b/src/prime.py
@@ -1,9 +1,8 @@
-from math import *
-
-"""Check wether a number is prime or not
+def is_prime_number(number):
+	"""Check wether a number is prime or not
 		Bruteforcing method
-"""
-def isPrimeNumber(number):
+	"""
+	from math import floor, sqrt
 	if number == 1: 					# 1 is not prime
 		return False 
 	if number == 2:						# 2 is a prime number
@@ -17,3 +16,36 @@ def isPrimeNumber(number):
 	return True
 
 
+def is_probably_prime(n, k):
+	"""	Check wether a number is probably prime 
+		Miller Rabin Primality Test
+		V2
+	"""
+	from random import randint
+
+	if n == 1: 					# 1 is not prime
+		return False 
+	if n == 2:					# 2 is a prime n
+		return True
+	if not n & 0x01:			# even numbers are not prime
+		return False
+
+	# 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)
+
+	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
+
-- 
GitLab