Skip to content

Commit 656c6b5

Browse files
[pre-commit.ci] auto fixes from pre-commit.com hooks
for more information, see https://pre-commit.ci
1 parent a616dc9 commit 656c6b5

1 file changed

Lines changed: 19 additions & 21 deletions

File tree

quantum/shor_algorithm.py

Lines changed: 19 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,12 @@
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
"""
13+
14+
1315
class Shor:
1416
def period_find(self, num: int, number: int) -> int:
1517
"""
@@ -21,12 +23,12 @@ def period_find(self, num: int, number: int) -> int:
2123
>>> shor.period_find(3, 7)
2224
6
2325
"""
24-
start:int = 1
26+
start: int = 1
2527
while pow(num, start, number) != 1:
2628
start += 1
2729
return start
28-
29-
def shor_algorithm(self, number:int) -> list[int]:
30+
31+
def shor_algorithm(self, number: int) -> list[int]:
3032
"""
3133
Run Shor's algorithm to factor a number.
3234
>>> shor = Shor()
@@ -37,28 +39,24 @@ def shor_algorithm(self, number:int) -> list[int]:
3739
>>> factors
3840
(3, 5)
3941
"""
40-
if number%2 == 0:
41-
return 2, number//2
42+
if number % 2 == 0:
43+
return 2, number // 2
4244
while True:
4345
random.seed(0)
44-
num:int = random.randint(2, number-1)
45-
gcd_number_num:int = math.gcd(number, num)
46+
num: int = random.randint(2, number - 1)
47+
gcd_number_num: int = math.gcd(number, num)
4648
if gcd_number_num > 1:
47-
return gcd_number_num, number//gcd_number_num
48-
49-
result:int = self.period_find(num, number)
50-
if not result%2:
51-
start:int = pow(num, result//2, number)
52-
if start != number-1:
53-
p_value:int = math.gcd(start-1, number)
54-
q_value:int = math.gcd(start+1, number)
49+
return gcd_number_num, number // gcd_number_num
50+
51+
result: int = self.period_find(num, number)
52+
if not result % 2:
53+
start: int = pow(num, result // 2, number)
54+
if start != number - 1:
55+
p_value: int = math.gcd(start - 1, number)
56+
q_value: int = math.gcd(start + 1, number)
5557
if p_value > 1 and q_value > 1:
5658
return p_value, q_value
57-
59+
5860

5961
shor = Shor()
6062
print(shor.shor_algorithm(15))
61-
62-
63-
64-

0 commit comments

Comments
 (0)