Skip to content

Commit ebf66fb

Browse files
committed
Handled type hinds
2 parents 17ec574 + 656c6b5 commit ebf66fb

File tree

2 files changed

+18
-19
lines changed

2 files changed

+18
-19
lines changed

DIRECTORY.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1192,6 +1192,7 @@
11921192

11931193
## Quantum
11941194
* [Q Fourier Transform](quantum/q_fourier_transform.py)
1195+
* [Shor Algorithm](quantum/shor_algorithm.py)
11951196

11961197
## Scheduling
11971198
* [First Come First Served](scheduling/first_come_first_served.py)

quantum/shor_algorithm.py

Lines changed: 17 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,15 @@
66
that is used in breaking the RSA cryptography protocol, by finding the
77
prime numbers that are used to create the public key value, n
88
9-
In this implementation, I have used a very simple construct without
9+
In this implementation, I have used a very simple construct without
1010
the use of qiskit or cirq to help understand how Shor algorithm's
1111
idea actually works.
1212
1313
Website referred for shor algorithm:
1414
https://www.geeksforgeeks.org/shors-factorization-algorithm/
1515
"""
16+
17+
1618
class Shor:
1719
def period_find(self, num: int, number: int) -> int:
1820
"""
@@ -24,7 +26,7 @@ def period_find(self, num: int, number: int) -> int:
2426
>>> shor.period_find(3, 7)
2527
6
2628
"""
27-
start:int = 1
29+
start: int = 1
2830
while pow(num, start, number) != 1:
2931
start += 1
3032
return start
@@ -40,28 +42,24 @@ def shor_algorithm(self, number:int) -> tuple[int, int]:
4042
>>> factors
4143
(3, 5)
4244
"""
43-
if number%2 == 0:
44-
return 2, number//2
45+
if number % 2 == 0:
46+
return 2, number // 2
4547
while True:
4648
random.seed(0)
47-
num:int = random.randint(2, number-1)
48-
gcd_number_num:int = math.gcd(number, num)
49+
num: int = random.randint(2, number - 1)
50+
gcd_number_num: int = math.gcd(number, num)
4951
if gcd_number_num > 1:
50-
return gcd_number_num, number//gcd_number_num
51-
52-
result:int = self.period_find(num, number)
53-
if not result%2:
54-
start:int = pow(num, result//2, number)
55-
if start != number-1:
56-
p_value:int = math.gcd(start-1, number)
57-
q_value:int = math.gcd(start+1, number)
52+
return gcd_number_num, number // gcd_number_num
53+
54+
result: int = self.period_find(num, number)
55+
if not result % 2:
56+
start: int = pow(num, result // 2, number)
57+
if start != number - 1:
58+
p_value: int = math.gcd(start - 1, number)
59+
q_value: int = math.gcd(start + 1, number)
5860
if p_value > 1 and q_value > 1:
5961
return p_value, q_value
60-
62+
6163

6264
shor = Shor()
6365
print(shor.shor_algorithm(15))
64-
65-
66-
67-

0 commit comments

Comments
 (0)