秀爾演演算法

秀爾演演算法是一個於 1994 年發現的，以數學家彼得・秀爾命名，針對整數分解題目的的量子演演算法（在量子計算機上面運作的演演算法）。不正式地說，它解決的題目是：給定一個整數 ，找出它的質因數。在一個量子計算機上面，要分解整數，秀爾演演算法的運作需要多項式時間（時間是 的某個多項式這麼長， 在這裡的意義是輸入的檔案長度）。準確來說，該演演算法花費 的時間，展示出質因數分解問題可以使用量子計算機以多項式時間解出，因此在複雜度類 BQP 裡面。這比傳統上已知的最快的因數分解演演算法普通數域篩選法所花費的次指數時間 —— 大約 還要快了一個指數。

秀爾演演算法非常重要，它意味著：假如有可用的量子計算機，我們可以破解基於公開金鑰加密的演算法（比如 RSA 加密演演算法）。RSA 演演算法的基礎在於假設了我們不能有效率的分解一個已知的整數。就目前所知，這假設對傳統（即非量子）的電腦為真；沒有已知的傳統演演算法可以在多項式時間內解決這個問題。但秀爾演演算法展示了因數分解問題在量子計算機上可以很有效率的解決，所以一個足夠大的量子計算機可以破解 RSA。這對於建立量子計算機和研究新的量子計算機演演算法是一個強大的動力。

2001 年，IBM 的一個小組展示了秀爾演演算法的例項，使用 NMR 實驗的量子計算機及 7 個量子位元，將 15 分解成 3×5。不過，對於 IBM 的實驗是否是量子計算的真實展示，有一些疑慮出現，因為沒有發現纏結現象。IBM 的實驗之後，也有其他的團隊以光學量子位元實驗秀爾演演算法，並強調可觀察到其纏結現象。

程式

試著解決的問題是：給定一個合成數，找到整數在和之間且不包含和，並且整除於。

秀爾演演算法包含兩個部份：

一個以傳統電腦運作的簡化演演算法，將因數分解簡化成搜尋階問題。
一個量子演演算法，解決搜尋階問題。

1.1 傳統部份

選擇任意數字

計算 gcd（ , ）。這裡可以使用輾轉相除法來計算。

若 gcd (,) ≠ 1，則我們有了一個 非平凡的因數，因此這部份結束了。

否則，利用下面的週期尋找子程式（Period-finding subroutine，下面會列出）來找出下面這個函式的週期 ：

,

換句話說，找出在裡面的階，或者最小的正整數 令。

若 是奇數，回到第一步。

若 /2 ≡ -1 (mod), 回到第一步。

gcd (a /2+1,) 與 gcd (a /2-1,) 至少有一個是 非平凡的因數。分解完成。

1.2 量子部份：週期尋找子程式（Period-finding subroutine）

這個演演算法使用的量子線路是為了在給定一個固定常數 以及一個任意常數 之下，找出 所設定的。給定，找出 = 2 且合乎（這同時表示）。輸入和輸出量子位元暫存器需要儲存從 0 到 -1 所有值的疊加態，因此分別需要 個量子位元。這裡使用看起來比所需的數量還要更多一倍的量子位元，保證了即使週期 的大小逼近 /2，也至少有 個不同的 會產生相同的 。

程式如下：

將暫存器初始化成

從 0 到 − 1。所以這一個初始態是 個狀態的疊加。

建立量子函式版本的 ( )，並且應用於上面的疊加態，得到

.

這裡仍舊是 個狀態的疊加。

對輸入暫存器進行量子傅立葉變換。這個變換（操作於二的冪次 —— 個疊加態上面）

使用一個 次單位根例如將任意給定態的振幅平均分佈在所有 個態上。另一個方法是對於每個不同的 ：。

由此得到最終狀態：

.

這是一個遠多過 個狀態的疊加態，但是遠低過 2 個。雖然在和中有 2 項，但只要 和 的值相同，態就可被提出來。令

為 的一個單位根，

 為 的週期，

 0 為一個產生相同 ( ) 的 的集裡面的最小元素（我們已經有 0

進行測量。我們由輸入暫存器取得結果 y，由輸出暫存器取得。而既然 是週期，對某對 y 和進行測量的機率則由

給出。分析顯示這個機率越高，單位向量就越接近正實數軸，或者越接近一個整數。除非 是 2 的乘方，否則它不會是的因子。

對進行連分數展開來計算其近似值，並生成滿足下列兩個條件的：

藉著滿足這一些條件， ′有很高的機率會是我們要找的週期 。

檢查 = ( + ′) 。如果成功了，我們就完成了。

否則，以接近 y 左右的數值作為 的候選，或者說多取幾個。如果任何候選成功了，我們就完成了。

否則，回到第一步驟（也就是全部重新做一次）。

演演算法的解釋

此演演算法包含兩個部份。演演算法的第一部份是將因數分解問題轉成尋找一個函式的週期，而且這部份可以用傳統方式實作。第二部份則是使用量子傅立葉變換來搜尋這個函式的週期，而且這一部份是量子加速這整個演演算法的理由。

2.1 I. 從週期得到因數

小於 N 且互質於 N 的整陣列成一個有限大，且對乘法同餘 N 的群。在步驟 3 之後，我們有一個屬於這個群的整數 a。既然這個群是有限的，a 必有一個有限大的階 r, 也就是最小的正整數令

因此可知，N 是 a r − 1 的因數。先假設我們有能力獲得 r，而且 r 是偶數。則

r 是令 a r ≡ 1 最小的正整數，所以（a r / 2 − 1）必定不能整除於 N。若（a r / 2 + 1）也不整除於 N 的話，則 N 必定與（a r / 2 − 1）或者（a r / 2 + 1）有一個非顯然的公因數。

證明：為了簡化，我們分別用 u 和 v 表示（a r / 2 − 1）和（a r / 2 + 1）。N | uv，故 kN = uv（k 是某個整數）。假設 gcd (v, N) = 1：則必定存在某個整數 m 和 n 令 mv + nN = 1 (這是最大公因數的一個性質)。兩邊同乘以 u，我們得到 mkN + nuN = u, 所以 N | u，從而產生矛盾（前文提到（a r / 2 − 1）必定不能整除於 N）。故假設不成立，即 gcd (v, N) ≠ 1。用類似的方法，可以得知若（a r / 2 + 1）不能整除於 N, gcd (u, N) ≠ 1。故得證 u 和 v 不同時與 N 互質。

這給予我們一個 N 的因數分解。若 N 是兩個質數的乘積，則這是唯一可能的分解。

2.2 II. 找尋週期

秀爾的週期尋找演演算法非常倚賴量子計算機同時處於許多狀態的能力。物理學家稱呼這個特性為狀態的「疊加」。在計算函式 f 的週期時，我們會同時估計這個函式的所有點。

不過，量子物理不允許我們直接取得這些資訊。測量會令觀測結果塌陷到其中一個可能的結果，並摧毀所有其他可能。如果不是因為不可複製原理，我們可以先測量 f (x) 而非測量 x，再製造幾個結果態的複製（將會是多個有著同樣的 f (x) 的態的疊加）。對這些態上的 x 的測量將會給出能給出相同 f (x) 的不同的 x，由此推匯出週期來。因為我們不能複製完全相同的量子狀態，這個方法行不通。因此在這裡我們需要小心的轉變疊加態，使其成為可以以高機率回傳正確答案的狀態。這可使用量子傅立葉變換來達成。

因此秀爾在這裡必須解決三個「實作」的問題，而且速度必須夠快，也就是可這些問題可以用量子閘個數為的多項式來實作。

製造狀態的疊加。

這可以藉著對所有輸入的量子位元使用哈達瑪閘（Hadamard gate）來達成。另一個方法是使用量子傅立葉變換（如下述）。

以量子變換實作函式 f。

要達成這件事情，秀爾使用了反覆平方以完成模的取冪變換。值得注意的是，這一個步驟比起量子傅立葉變換還難以實作，需要更多輔助的量子位元以及明顯更多的閘來完成。

進行量子傅立葉變換。

利用受控旋轉閘（controlled rotation gate）和哈達瑪閘，秀爾設計了一個量子傅立葉變換的線路，只使用了個閘（Q = 2q）。

在這一些變換之後，測量會給出週期 r 的近似值。為簡明起見，假設存在 y 令 yr/Q 是整數，則測量到 y 的機率是 1（理論上）。要推匯出這個，我們首先注意到對任何整數 b，。

因此 Q/r 的平方能告訴我們測量 y 的機率，因為 b 大致上取 Q/r 個值，因此機率為。有 r 個 y 使得 yr/Q 為整數，也有 r 種可能，所以機率總和為 1。

Note: 另一種解釋秀爾演演算法的方式是將之視為是喬裝過後的量子相位估計演演算法。