因數分解算法、週期查找算法(簡化)

質因數分解的複雜是公認,這也是咱們將他做爲 RSA (一種普遍使用的公鑰加密算法)的數學難題的緣由。html

\(N=P*Q\) (P、Q是質數),n = length of N in bit算法

對於這麼一個N,咱們因數分解獲得結果的時間複雜度是 $2n$ ,由於這個複雜,因此也有一堆的數學家在努力下降這個的時間複雜度,目前的優化結果的時間複雜度是 $2{ \sqrt[3]}$ 。函數

那麼量子是否可以有更好的結果呢?優化

在講因數分解以前,須要先提週期查找算法。加密

週期查找 Period Finding

週期查找的基礎是 量子傅里葉變換spa

**Input : **3d

\(f:(0,1,2,…,M-1) \rightarrow S\) for all x \(f(x)=f(x+r)\)htm

challenge :blog

find rget

condition:

  1. f is 1-1 on period 在週期內,f是一個一一對應的函數

2)\(M>>r\) \(M>2r^2\)

3)M可以被r整除 (這是一個簡化條件,稍後會有不簡化的怎麼辦)

這個電路,個人輸入是 $ \frac{1}{\sqrt M} \sum_^ |x\rangle |0\rangle$

通過f(x)後,個人量子疊加態是 $ \frac{1}{\sqrt M} \sum_^ |x\rangle |f(x)\rangle$

此時,若是測量了下面的 f(x),那麼上面的量子態會坍縮,會變成只有f(x)等於測量結果的x,顯而易見,這是一個周期函數。

量子傅里葉變換 中,咱們提到過傅里葉變換的第一個特色,當輸入shift了,結果是不會變的。

若是咱們輸入的量子態的機率幅爲 \(\alpha_0 , \alpha_1, \alpha_2, \alpha_3,…, \alpha_{N-1}\) ,輸出的量子態的機率幅爲 \(\beta_0 , \beta_1, \beta_2, \beta_3,…, \beta_{N-1}\)

則,當咱們將輸入的機率幅變爲:\(\alpha_{N-},\alpha_0 , \alpha_1, \alpha_2, …, \alpha_{N-2}\) 輸出的機率不變。(這裏寫得是機率,不是機率幅,機率是機率幅的平方)

也就是說,我測量的隨機結果多是這個週期當中的i個值,我也能shift成在第一個位置。

即,把 [0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 ……] (每一個週期五個,第三個爲1,其他爲0) 變成 [ 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 …… ] (每一個週期五個,第三個爲1,其他爲0) 。

他們通過傅里葉變換後的結果是同樣的。

其實到這裏,咱們發現,咱們測不測量f(x)其實都沒有關係,由於在這前面全部測量結果對應的x,都是同一個週期的周期函數,由於shift的緣由,他們傅里葉變換後的結果都是同樣的。

那麼,這麼作的意義是?

量子傅里葉變換還有第二個特色:傅里葉變換能夠改變周期函數的週期。

他能夠把週期爲r的函數,變成周期爲 \(\frac{M}{r}\) 的函數。

對最後的這個函數測量,獲得的結果是 \(\frac{M}{r}\) 的倍數,多測量幾回就知道了 \(\frac{M}{r}\) 的值。知道了這個值,很容易反推出r的值,週期查找完成。

若是沒有簡化條件呢?

即,M不是r的倍數。

那,假設測量結果爲L,則找到一個最接近 \(\frac{L}{M}\) 的分數 \(\frac{t}{r}\) ,惟一的要求是 \(M>2r^2\) 最後經過一種叫作continued fraction的方法找到r。

因數分解

一個例子:

問題:找N=21的因數。

解法:

step 1:

$2^0=1 (\mod 21)$ 除以21後餘數爲1

$2^1=2 (\mod 21)$

$2^2=4 (\mod 21)$

$2^3=8 (\mod 21)$

$2^4=16 (\mod 21)$

$2^5=11 (\mod 21)$

$2^6=1 (\mod 21)$

step 2:

$26-20=0 (\mod 21)$

$2^6-1=0 (\mod 21)$

\((2^3-1)(2^3+1)=0 (\mod 21)\)

到這一步,咱們發現了什麼?

$(23-1)(23+1)$是21的倍數,那麼他的兩個因數 \((2^3-1)\)\((2^3+1)\) 必定和21有公約數。

gcd(21,7)=7

gcd(21,9)=3

gcd求最大公約數你們還熟悉嗎?

好比說,咱們相找21和15的最大公約數。

$21=15*1+6$

$15=6*2+3$

$6=3*2+0$

最大公約數就是最後一個不爲0的餘數,這裏就是3。求最大公約數的算法很快,大概是在 \(log N\) 的級別。

那麼如今的問題其實就是step1 ,找到函數 \(f(a)=x^a \mod N\) 的週期,在上述例子中 $20$ 和 $26$ 取餘相等,這就是一個週期,週期爲6.

如今因數分解問題就所有轉化爲了週期查找問題。

而週期查找問題剛好,有量子加速的方法,前文已經提過了,再也不累述,咱們知道週期查找有一個前提條件是 \(M> 2r^2\) ,在這個例子中,咱們不知道r是多少,這個是咱們要求的,可是咱們知道,r<N,因此直接讓 \(M > 2N^2\) 就好。

變成電路圖就是:

獲得週期,而後通過 step 2 就是咱們想要的因數分解。

參考資料: Quantume Mechanics & Quantume Computation Lecture 10

相關文章
相關標籤/搜索