學習這個算法時候網上介紹不多,只能硬啃論文;本片文章是對Shor算法原理的一個簡單描述,以及它用於解決什么樣的問題,其實最關鍵的部分(關於QFT 量子傅里葉變換的內容)我並不理解,但這並不影響我們以數論的現有知識來學習理解這個算法。
背景
1994年,AT&T公司研究人員Shor發現了分解兩個大質因數相乘合數的量子算法(質數就是素數),對RSA公鑰密碼體制產生強烈沖擊;它不僅給量子計算機研究注入了活力,引發了量子計算和量子計算機研究的熱潮。
原理
設n1、n2為兩個奇質數(大於2的素數),而N = n1·n2,Shor算法概述如下:
(1)隨機取正整數y,要求y<N且與N互素,用量子計算機和相關算法求r = ordN(y),即y是關於N的階數,r是使得yr Ξ 1 mod N成立的最小正整數( 也就是說,函數f(t) = yt mod N的最小正周期為r)。
(2)若r為奇數,則返回(1)重新取y。並重新求r,直到r為偶數為止。
(3)r為偶數,取 x Ξ yr/2 mod N。
故 x2 Ξ 1 mod N
(x+1)(x-1) Ξ 0 mod N
於是設 (x+1)(x-1) = t·N = t·n1·n2 ,t為正整數,t不一定為素數,假設可繼續分解為t = r·s,r、s為大於等於1的正整數。
(x+1)(x-1) = (r·n1)·(s·n2) 這是等式
於是上式有兩個解:
1. x1+1 Ξ 0 mod n1 ,x1-1 Ξ 0 mod n2 解為 n1 = gcd(x+1,N) , n2 = gcd(x-1,N)
2. x2+1 Ξ 0 mod n2 ,x2-1 Ξ 0 mod n1 解為 n1 = gcd(x-1,N) , n2 = gcd(x+1,N)
接下來使用輾轉相除法分別求出x+1和N的最大公約數、x-1和N的最大公約數分別為n1和n2。
綜上,已知N,選取隨機數y<N且互素,最重要的一步是求y關於N的階r,要求r為偶數。進而由r計算出x: x Ξ yr/2 mod N 。最后求x+1、x-1和N的最大公約數分別為n1、n2 。
評價
Shor算法的核心是利用數論的一些定理,將大數因子分解過程轉化為求某個函數的周期,由於在量子環境下,可以以極高的效率實現量子傅里葉變換(QFT),從而可以對大數質因子進行分解。
參考
1. 量子Shor算法與RSA體制的安全性_曹正軍
2. SHOR量子算法的原理與程序模擬_朱纓