本研究的目的是針對 Shor 提出的量子質因數分解演算法來進行程式模擬, 可應用的 模擬器有 jQuantum、QCE、QCSim、QAD、QuIDDPro 等。 而此研究是則是利用 QuaSi2[33]模擬器來設計量子電路。
QuaSi是由Beth 教授 (任教於德國卡爾斯魯厄大學 Karlsruhe) 領導的 Insti-tuts fur Algorithmen und Kognitive Systeme (IAKS) 組織所研發出來的, 歷 時三年時間 (1998-2000年)。 這套軟體是以 java 語言編寫的, 特點是使用者可以利 用圖示介面輕易的建構和模擬量子電路, 能模擬20個量子位元並計算出函數值, 目前 仍在持續的研發中, 現今為 QuaSi2的版本。(如圖4.1)
執行 QuaSi2後會出現四個視窗, 第一個視窗是設計完成的量子電路, 第二個視窗 是計算出函數值並顯示量子狀態, 第三個視窗是利用顏色的線段顯示各量子狀態的機 率波, 第四個視窗是利用顏色的線段顯示各量子狀態的振幅。(如圖4.2) 我們可以選擇 輸入量子位元數的數值, 並增加所需的量子閘來設計電路 (第一個視窗), 設計完成後 按執行就可以由其他三個視窗得到結果, 由結果可以再進一步進行分析。
QuaSi2的基本閘包含了 H閘、CN閘、CCN閘、 測量閘, 沒有調換閘,但也能達到 調換閘的功能, 並且可以讓使用者自訂閘的數值和名稱, 非常便利; 當於第一個視窗點 選任意位置時, 會顯示該位置的量子位元次序值和函數值。 QuaSi2也可以執行 Shor 演算法和 Grover 演算法, 只要輸入所需的數值即可。
第 4 章 研究分析
圖 4.1: QuaSi2軟體的介面
4.1 模擬程式
參考文獻[15] [34]來描述Shor 量子演算法, 並且設計量子電路, 利用 QuaSi2模擬器 執行可得到結果。 質因數分解演算法完整的量子電路架構如圖4.3,
而其演算法的詳細步驟如下述說明: 已知 一個正整數 n。
目的 求出兩個質因數p1和p2, 即n= p1 × p2。
步驟一 隨意找一個數x, 使其和 n 互質, 即gcd(x, n) = 1 且 1 ≤ x ≤ n − 1。
第 4 章 研究分析
圖 4.2: QuaSi2的四個顯示視窗
步驟二 準備兩個暫存器 reg1和 reg2, 而其個別的量子位元數L1和L2的範 圍為:2 log2(n) ≤ L1 < 2 log2(2n),log2(n) ≤ L2。
步驟三 將reg1和 reg2初始化:|reg1i = |0000 · · · 0i, |reg2i = |00 · · · 0i, 步驟四 利用 H 閘使 reg1包含了|0i、|1i、|2i · · · |q − 1i狀態。
即|reg1i = √1q Pq−1
j=0|ji。
步驟五 |reg2i = |xj mod ni = |f(j)i。
步驟六 再對 reg1進行量子傅立業轉換, 狀態變為
第 4 章 研究分析
第 4 章 研究分析
第 4 章 研究分析
第 4 章 研究分析
第 4 章 研究分析
因此此測量值就估算不出正確週期, 這也是要執行ln(m)次的原因。
步驟十 週期 r 得知後即可算出兩個質因數 p1 和 p2,
p1 = gcd(242 − 1, 15) = 3; p2 = gcd(242 + 1, 15) = 5。 所以 n=15可分解成3 × 5。
了解演算步驟後, 原本只要將步驟九執行ln(m) = 6的六次量測值列出, 但是, 為 了產生更多數據來驗證量子演算法是否可行, 因此, 多列出一倍的數據, 列出十二次 量測值, 再由每次的量測值中找出峰值 (附錄二)。 紀錄每一次的量測結果和機率振幅 的分佈情形, 並將模擬(x, n)為 (2, 15)的量子電路中執行12次的結果, 一一的呈現出 來。(如圖4.4到圖4.15) 以下針對十二次的結果進行分析, 如下述:
第一次
圖 4.4: 執行(x,n)=(2,15) 第一次的四個顯示視窗
表4.1中的量子位元狀態|ki有分為二進位和十進位的寫法 (如附錄一), R表示量測 值的實數, I表示量測值的虛數, prob(k) 表示各量子位元的機率。
第 4 章 研究分析
表 4.1: 執行 (x,n)=(2,15) 第一次量測結果
|ki值
次數 十進位 二進位 R I prob(k)
一 0 |000000000010i 0.500 0.000 0.250 64 |010000000010i 0.000 0.500 0.250 128 |100000000010i -0.500 0.000 0.250 192 |110000000010i 0.000 -0.500 0.250
如圖4.4: 左上的視窗為 (x,n)=(2,15) 量子電路, 量子電路設計的方法已於4.4章
第 4 章 研究分析
由量測值可知峰值|ki為0,64,128,192。 當|ki = 64, 由連分數法可得知週期為4, p1 = gcd(242 − 1, 15) = 3; p2 = gcd(242 + 1, 15) = 5, 即可算出 n=15可分解 成3 × 5。 當|ki = 0, 128, 192, 則無法算出正確的週期, 因此, 這三個峰值無法得知 15因數分解後的結果 (演算步驟於5.2章節)。
第二次
圖 4.5: 執行(x,n)=(2,15) 第二次的四個顯示視窗
表 4.2: 執行 (x,n)=(2,15) 第二次量測結果
|ki值
次數 十進位 二進位 R I prob(k)
二 0 |000000000011i 0.354 0.000 0.125 65 |000000000011i 0.214 -0.230 0.099 193 |110000010011i -0.236 -0.220 0.104 254 |111111100011i 0.225 0.017 0.051
由第二次量測結果中的的256個量測值找出1個最大峰值和三個依次較小的峰值,
第 4 章 研究分析
如圖4.5和表4.2。 這四個峰值的機率值 (prob(k)) 算出來不一樣, 第一個峰值的機率 值最大, 所以表示的線段也會比較長; 而四個峰值分別是位於0,65,193,254的位置上。
量測值中有負數的, 表示振幅的線段就會位於水平線下方, 由圖即可看出各個量子位 元狀態機率和振幅分布的情況。|ki = 193的振幅為負數, 圖中顯示的線段在水平線下 方; |ki = 0, 65, 254的振幅為正數, 圖中顯示的線段在水平線上方。
由最大峰值|ki = 0, 無法算出正確的週期, 因此, 第二次的量測結果無法得知15 因數分解後的結果。
第三次
圖 4.6: 執行(x,n)=(2,15) 第三次的四個顯示視窗
由第三次量測結果中的的256個量測值找出4個峰值, 如圖4.6和表4.3。 有四條線 段是最長的且等長的, 因為這四個峰值的機率值是一樣的。 而其量子位元狀態分別為 0,64,128,192, 也就是表示峰值|ki為0,64,128,192, 與第一次量測結果結果相同。 |k
= 128, 192的振幅為負數, 圖中顯示的線段在水平線下方; |ki = 0, 64的振幅為正
第 4 章 研究分析
表 4.3: 執行 (x,n)=(2,15) 第三次量測結果
|ki值
次數 十進位 二進位 R I prob(k)
三 0 |000000000100i 0.260 0.189 0.103 64 |010000000100i 0.189 -0.260 0.103 128 |100000000100i -0.260 -0.189 0.103 192 |110000000100i -0.189 0.260 0.103
數, 圖中顯示的線段在水平線上方。 當|ki = 64, 由連分數法可得知週期為4, p1 = gcd(242 − 1, 15) = 3; p2 = gcd(242+ 1, 15) = 5, 即可算出 n=15可分解成3 × 5。 當|ki = 0, 128, 192, 則無法算出正確的週期, 因此, 這三個峰值無法得知15因數分 解後的結果。
第四次
圖 4.7: 執行(x,n)=(2,15) 第四次的四個顯示視窗
由第四次量測結果中的的256個量測值找出2個最大峰值和2個次大峰值, 如圖4.7和
第 4 章 研究分析
表 4.4: 執行 (x,n)=(2,15) 第四次量測結果
|ki值
次數 十進位 二進位 R I prob(k)
四 0 |000000000101i 0.223 0.093 0.058 127 |011111110101i -0.111 0.268 0.084 128 |100000000101i 0.223 0.093 0.058 255 |111111110101i -0.111 0.268 0.084
表4.4。 此四個峰值的量子位元狀態為0,127,128,255, 而|ki = 0和|ki = 128的 機率值一樣, |ki = 127和|ki = 255的機率值一樣, 但是|ki = 127, 255的機率 值大於|ki = 0, 128。 |ki = 0, 128的振幅為負數, 圖中顯示的線段在水平線下方;
|ki = 127, 255 的振幅為正數, 圖中顯示的線段在水平線上方。
由量測值可知最大峰值|ki為127,255。 這兩個峰值皆無法算出正確的週期, 因此, 由第四次的量測結果中無法得知15因數分解後的結果。
第五次
圖 4.8: 執行(x,n)=(2,15) 第五次的四個顯示視窗
第 4 章 研究分析
表 4.5: 執行 (x,n)=(2,15) 第五次量測結果
|ki值
次數 十進位 二進位 R I prob(k)
五 170 |101010100001i 0.116 0.120 0.028 171 |101010110001i -0.130 0.066 0.021 178 |101100100001i 0.100 0.160 0.036 196 |110010000001i 0.120 0.053 0.017
由第五次量測結果中的的256個量測值找出1個最大峰值和3個依次較小的峰值,
六 59 |001110110000i 0.142 -0.100 0.030 67 |010000110000i 0.272 0.014 0.074 78 |010011100000i 0.110 -0.102 0.023 123 |011110110000i -0.129 -0.112 0.029 131 |100000110000i -0.120 -0.169 0.043
由第六次量測結果中的的256個量測值找出1個最大峰值和4個依次較小的峰值, 如圖4.9和表4.6。 此五個峰值的量子位元狀態為59,67,78,123,131, |ki = 59, 78, 123 ,131的振幅為負數, 圖中顯示的線段在水平線下方; |ki = 67的振幅為正數, 圖中顯
第 4 章 研究分析
圖 4.9: 執行(x,n)=(2,15) 第六次的四個顯示視窗
示的線段在水平線上方。
最大峰值|ki = 67,由連分數法可得知週期為4, p1 = gcd(242−1, 15) = 3; p2 = gcd(242 + 1, 15) = 5, 即可算出 n=15可分解成3 × 5。
第七次
表 4.7: 執行 (x,n)=(2,15) 第七次量測結果
|ki值
次數 十進位 二進位 R I prob(k)
七 1 |000000010010i -0.127 0.040 0.018 62 |001111100010i -0.117 0.070 0.019 65 |010000010010i -0.040 -0.130 0.019 126 |011111100010i -0.070 -0.117 0.019 129 |100000010010i 0.128 -0.040 0.018 190 |101111100010i 0.117 -0.070 0.019 193 |110000010010i 0.040 0.127 0.018 254 |111111100010i 0.070 0.117 0.019
第 4 章 研究分析
圖 4.10: 執行(x,n)=(2,15) 第七次的四個顯示視窗
由第七次量測結果中的的256個量測值找出5個最大峰值和3個依次較小的峰值, 如圖4.10和表4.7。 此次量測結果中, 與其他次的量測結果相較之下, 每個峰值的機率 值較為接近。 此八個峰值的量子位元狀態為1,62,65,126,129, 190,193,254, |ki = 1, 62, 65, 126 ,129,190的振幅為負數, 圖中顯示的線段在水平線下方; |ki = 193, 254的振幅為正數,圖中顯示的線段在水平線上方。|ki = 1, 193的機率值一樣, |ki = 62, 126 ,190,254的機率值一樣。
當|ki = 62, 65, 由連分數法可得知週期為4, p1 = gcd(242 − 1, 15) = 3; p2 = gcd(242 + 1, 15) = 5, 即可算出 n=15可分解成3 × 5。
第八次
由第八次量測結果中的的256個量測值找出1個最大峰值和1個次大峰值, 如圖4.11 和表4.8。 此兩個峰值的量子位元狀態為41,233, |ki = 41的振幅為負數, 圖中顯示的 線段在水平線下方; |ki = 233的振幅為正數, 圖中顯示的線段在水平線上方。
第 4 章 研究分析
圖 4.11: 執行(x,n)=(2,15) 第八次的四個顯示視窗
表 4.8: 執行 (x,n)=(2,15) 第八次量測結果
|ki值
次數 十進位 二進位 R I prob(k)
八 41 |001010011100i -0.107 -0.156 0.036 233 |111010011100i 0.248 0.110 0.074
第 4 章 研究分析
由量測值可知最大峰值|ki為233, 無法算出正確的週期, 因此, 由第八次的量測結 果中無法得知15因數分解後的結果。
第九次
圖 4.12: 執行(x,n)=(2,15) 第九次的四個顯示視窗
表 4.9: 執行 (x,n)=(2,15) 第九次量測結果
|ki值
次數 十進位 二進位 R I prob(k)
九 3 |000000110111i -0.046 0.155 0.026 67 |010000110111i 0.046 -0.155 0.026 131 |100000110111i -0.046 0.155 0.026 195 |110000110111i 0.046 -0.155 0.026
由第九次量測結果中的的256個量測值找出4個峰值, 如圖4.12和表4.9。 此次量測 結果中, 四個峰值的機率值一樣。 此四個峰值的量子位元狀態為3,67,131,195, |ki = 3, 67, 131, 195的振幅皆為負數, 圖中顯示的線段在水平線下方。
第 4 章 研究分析
當|ki = 67, 由連分數法可得知週期為4, p1 = gcd(242 − 1, 15) = 3; p2 = gcd(242 + 1, 15) = 5, 即可算出 n=15可分解成3 × 5。 當|ki = 3, 131, 195, 則無法 算出正確的週期, 因此, 這三個峰值無法得知15因數分解後的結果。
第十次
圖 4.13: 執行(x,n)=(2,15) 第十次的四個顯示視窗
表 4.10: 執行 (x,n)=(2,15) 第十次量測結果
|ki值
次數 十進位 二進位 R I prob(k)
十 40 |001010000110i -0.123 -0.024 0.016 104 |011010000110i -0.123 -0.024 0.016 168 |101010000110i -0.123 -0.024 0.016 232 |111010000110i -0.123 -0.024 0.016
由第十次量測結果中的的256個量測值找出4個峰值, 如圖4.13和表4.10。 這次四 個峰值的機率值都一樣, 而量子位元狀態為40,104,168,232; 當|ki = 40, 104, 168
第 4 章 研究分析
232的振幅皆為負數, 圖中顯示的線段在水平線下方。
由量測值可知峰值|ki為40,104,168,232, 這四個峰值皆無法算出正確的週期, 因 此, 由第十次的量測結果中無法得知15因數分解後的結果。
第十一次
圖 4.14: 執行(x,n)=(2,15) 第十一次的四個顯示視窗
表 4.11: 執行 (x,n)=(2,15) 第十一次量測結果
|ki值
次數 十進位 二進位 R I prob(k)
十一 82 |010100101101i -0.188 -0.004 0.035 83 |010100111101i -0.124 -0.173 0.045 84 |010101001101i 0.065 -0.182 0.037
由第十一次量測結果中的的256個量測值找出1個最大峰值和2個依次較小的峰值, 如圖4.14和表4.11。 此三個峰值的量子位元狀態為82,83,84, 與其他次的量測結果比 較, 峰值的位置較集中, 其他量測次數的峰值位置則較分散。 |ki = 82, 83, 84的振幅
第 4 章 研究分析
皆為負數, 圖中顯示的線段在水平線下方。
由量測值可知最大峰值|ki為83, 無法算出正確的週期, 因此, 由第十一次的量測結 果中無法得知15因數分解後的結果。
第十二次
圖 4.15: 執行(x,n)=(2,15) 第十二次的四個顯示視窗
表 4.12: 執行 (x,n)=(2,15) 第十二次量測結果
|ki值
次數 十進位 二進位 R I prob(k)
十二 10 |000010101100i 0.165 -0.109 0.039 72 |010010001100i 0.176 -0.109 0.043 74 |010010101100i 0.218 -0.075 0.053 138 |100010101100i 0.183 -0.221 0.082
由第十二次量測結果中的的256個量測值找出1個最大峰值和3個依次較小的峰值, 如圖4.15和表4.12。 此四個峰值的量子位元狀態為10,72,74,138, |ki = 10, 72, 74,
第 4 章 研究分析
第 4 章 研究分析
解成哪兩個質因數相乘。 將六次的量測結果列出, 並分析量測結果。
進行質因數分解時, 依照演算步驟, 2 log2(n) ≤ L1 ≤ 2 log2(2n), log2(n) ≤
進行質因數分解時, 依照演算步驟, 2 log2(n) ≤ L1 ≤ 2 log2(2n), log2(n) ≤