[量子计算]Shor算法

栏目: 编程工具 · 发布时间: 4年前

内容简介:秀尔算法(Shor’s algorithm)是一种非常著名的量子算法,甚至可以说是量子计算的一块金字招牌了。Shor’s algorithm可以在多项式时间内完成大整数质因数分解。所以Shor’s algorithm从诞生之时,就和以RSA算法为根基的加密技术形成了不可调和的矛盾。2001年,IBM的研究小组使用Shor’s algorithm完成了

Post Views: 40

秀尔算法(Shor’s algorithm)是一种非常著名的量子算法,甚至可以说是量子计算的一块金字招牌了。Shor’s algorithm可以在多项式时间内完成大整数质因数分解。所以Shor’s algorithm从诞生之时,就和以RSA算法为根基的加密技术形成了不可调和的矛盾。2001年,IBM的研究小组使用Shor’s algorithm完成了 15 = 3×5 这个整数分解运算 。时至今日,快20年过去了,量子计算机没有摧毁RSA。未来这一天来临的时候,希望我们已经准备好了。下图是,经典大数分解和秀尔算法的复杂度对比。

[量子计算]Shor算法

Shor算法的整体流程

完整的Shor算法是需要经典计算机和量子计算机协作完成的。其中量子计算机实现一个周期查找的函数,经典计算机负责整个算法流程的控制,以及调用量子算法。

首先、还是表达一下Shor’s algorithm的问题描述:给定一个合成数N,找到整数p在1和N之间且不包含1和N,并且N整除于p。

  1. 选择任意数字 a
  2. 计算 gcd(a, N) 。可以使用辗转相除法来计算。
  3. gcd(a, N) \not = 1 (不等于,这里不等号渲染有问题),则我们有了一个 N 非平凡的因数,因此这部分结束了。否则,利用下面的周期查找子程序(Period-finding subroutine,使用量子计算机完成)来找出下面这个函数的周期 r

f(x)=a^{x} {mod} N

换句话说,找出 a{Z} _{N} 里面的阶 r ,或者最小的正整数 rf ( x + r ) = f ( x )

  1. r 是奇数,回到第一步。
  2. a^{ r /2} ≡ -1 (mod N) ,回到第一步。否则,计算 gcd(a^{r/2}+1, N)gcd(a^{r/2}-1, N) ,并验证他们是不是分别是N非平凡的因数。成功则分解完成。

第三个步骤中,周期查找函数是使用量子计算机完成的。这里暂且不分析这一部分,而关注于整体流程。第一个步骤就是遍历小于N的整数;第二步其实就是碰碰运气,如果a和N的最大公约数不是1,那就是运气好,算法直接结束了;如果最大公约数是1,则调用周期查找子程序计算 f(x)=a^{x} {mod} N 这个函数的阶数 rmod N 就是以 N 为模的取模运算。

因为 f ( x + r ) = f ( x ) ,而且 f ( 0 ) = 1 mod N ,因此可得:

f ( 0 ) = f (0+ r )=a^{r} mod N =1mod N

a^{r}-1=0 modN

如果 r 为偶数,而且 a^{ r /2} 不等于-1,则可得:

(a^{r/2}+1)(a^{r/2}-1)=0 modN

观察上面的等式可以很容易发现, (a^{r/2}+1)(a^{r/2}-1)N 存在不是1的最大公约数,也即 (a^{r/2}+1) 或者 (a^{r/2}-1)N 非1的最大公约数。通过辗转相除法即可计算出来,然后验证这两个最大公约数是不是 N 的因子即可。如果是的话,算法就成功了。

整个算法的充分性,其实是比较明显的,因为最终都会验证结果是不是 N 的因子。算法的必要性,即是不是一定能找到质因子,我其实还没理解清楚,这里先略过了。接下来就是Shor算法的量子部分,即前文说的Period-finding subroutine。

周期查找算法(Period-finding algorithm)

周期查找算法的作用就是求 f(x)=a^{x} {mod} N 这个函数的周期。查找周期的前提是周期存在,这个函数的周期存在吗?欧拉对这个问题做过证明,有如下结论: gcd ( y, N ) = 1 ,按 Euler 定理,周期 r 一定存在。

周期查找算法其实本质上是特殊情况的相位估计算法变种(如果对相位估计算法,可以看看我前面相位估计的文章),整体的算法流程如下:

  1. \vert 0 \rangle\vert 0 \rangle ; 初始化状态
  2. \longrightarrow\dfrac{1}{\sqrt{2^t}} \displaystyle\sum_{x=0}^{2^t-1} {\vert j \rangle} {\vert 0 \rangle} ; 使用Hadamard门生成叠加态
  3. \longrightarrow\dfrac{1}{\sqrt{2^t}} \displaystyle\sum_{j=0}^{2^t-1} {\vert x \rangle} {\vert f(x) \rangle} \approx \dfrac{1}{\sqrt{r2^t}} \displaystyle \sum_{l=0}^{r-1} \sum_{x=0}^{2^t-1} {e^{2\pi i lx / r}} {\vert x \rangle} {\vert \hat f(l) \rangle} ;
    这一步主要是通过”控制 U 变换”,其中 U{\vert x \rangle}{\vert y \rangle} = {\vert x \rangle}{\vert y \bigoplus f(x) \rangle}
  4. \longrightarrow \dfrac{1}{\sqrt{r}} \sum_{l=0}^{r-1} {\vert \widetilde{l / r} \rangle} {\vert \hat f(l) \rangle} ;
    这一步主要是应用傅里叶反变换。
  5. \longrightarrow { \widetilde{l / r} }
    这一步就是测量上部分寄存器的值。
  6. \longrightarrow {r}
    通过连分数算法计算r的值。

其中,第三步使用了控制U门,而且引入新的表示态:

{\vert \hat f(l) \rangle} = \dfrac{1}{\sqrt{r}} \displaystyle \sum_{x=0}^{r-1} {e^{-2\pi i lx / r}} {\vert x \rangle}

其实就是 f(x) 傅里叶变换之后的态,由于 2^t 不一定是周期 r 的整倍数,所以步骤三有一个约等号。此外,由于随机性, l 是有很多可能取值的。因此有人可能会质疑如果 lr 的整数倍,则连分数算出的 r 是有问题的。但这个其实不用担心,和 r 互质的会更多,所以从概率来讲,正确的 r 会很高概率地被发现。

本来是打算每个算法都做一个线路实现的,可是Shor算法很难搞,这里就只能略过了。这篇水完,量子计算方面应该会暂时告一段落了,毕竟还有太多事情要做。而且写的这些东西,我也不满意,毕竟是现学现卖了,准备之后有时间修改一下。

参考文献

【1】.《量子计算与量子信息》Michael A. Nielsen

【2】.《量子力学》列文.朗道

【3】.《量子力学原理》P.A.M. Dirac

【4】. ETHZ讲义


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Programming Rust

Programming Rust

Jim Blandy / O'Reilly Media / 2016-8-25 / GBP 47.99

This practical book introduces systems programmers to Rust, the new and cutting-edge language that’s still in the experimental/lab stage. You’ll learn how Rust offers the rare and valuable combination......一起来看看 《Programming Rust》 这本书的介绍吧!

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

随机密码生成器
随机密码生成器

多种字符组合密码

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具