质因数分解的复杂是公认,这也是咱们将他做为 RSA (一种普遍使用的公钥加密算法)的数学难题的缘由。html
\(N=P*Q\) (P、Q是质数),n = length of N in bit算法
对于这么一个N,咱们因数分解获得结果的时间复杂度是 $2n$ ,由于这个复杂,因此也有一堆的数学家在努力下降这个的时间复杂度,目前的优化结果的时间复杂度是 $2{ \sqrt[3]}$ 。函数
那么量子是否可以有更好的结果呢?优化
在讲因数分解以前,须要先提周期查找算法。加密
周期查找的基础是 量子傅里叶变换 。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:
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 就是咱们想要的因数分解。