66that is used in breaking the RSA cryptography protocol, by finding the
77prime 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
1010the use of qiskit or cirq to help understand how Shor algorithm's
1111idea actually works.
1212"""
13+
14+
1315class 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
5961shor = Shor ()
6062print (shor .shor_algorithm (15 ))
61-
62-
63-
64-
0 commit comments