Skip to content

Commit

Permalink
Handled type hinds
Browse files Browse the repository at this point in the history
  • Loading branch information
joelkurien committed Oct 29, 2024
2 parents 17ec574 + 656c6b5 commit ebf66fb
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 19 deletions.
1 change: 1 addition & 0 deletions DIRECTORY.md
Original file line number Diff line number Diff line change
Expand Up @@ -1192,6 +1192,7 @@

## Quantum
* [Q Fourier Transform](quantum/q_fourier_transform.py)
* [Shor Algorithm](quantum/shor_algorithm.py)

## Scheduling
* [First Come First Served](scheduling/first_come_first_served.py)
Expand Down
36 changes: 17 additions & 19 deletions quantum/shor_algorithm.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,13 +6,15 @@
that is used in breaking the RSA cryptography protocol, by finding the
prime numbers that are used to create the public key value, n
In this implementation, I have used a very simple construct without
In this implementation, I have used a very simple construct without
the use of qiskit or cirq to help understand how Shor algorithm's
idea actually works.
Website referred for shor algorithm:
https://www.geeksforgeeks.org/shors-factorization-algorithm/
"""


class Shor:
def period_find(self, num: int, number: int) -> int:
"""
Expand All @@ -24,7 +26,7 @@ def period_find(self, num: int, number: int) -> int:
>>> shor.period_find(3, 7)
6
"""
start:int = 1
start: int = 1
while pow(num, start, number) != 1:
start += 1
return start
Expand All @@ -40,28 +42,24 @@ def shor_algorithm(self, number:int) -> tuple[int, int]:
>>> factors
(3, 5)
"""
if number%2 == 0:
return 2, number//2
if number % 2 == 0:
return 2, number // 2
while True:
random.seed(0)
num:int = random.randint(2, number-1)
gcd_number_num:int = math.gcd(number, num)
num: int = random.randint(2, number - 1)
gcd_number_num: int = math.gcd(number, num)
if gcd_number_num > 1:
return gcd_number_num, number//gcd_number_num
result:int = self.period_find(num, number)
if not result%2:
start:int = pow(num, result//2, number)
if start != number-1:
p_value:int = math.gcd(start-1, number)
q_value:int = math.gcd(start+1, number)
return gcd_number_num, number // gcd_number_num

result: int = self.period_find(num, number)
if not result % 2:
start: int = pow(num, result // 2, number)
if start != number - 1:
p_value: int = math.gcd(start - 1, number)
q_value: int = math.gcd(start + 1, number)
if p_value > 1 and q_value > 1:
return p_value, q_value


shor = Shor()
print(shor.shor_algorithm(15))




0 comments on commit ebf66fb

Please sign in to comment.