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