Shor算法及Qiskit实现

Shor算法及Qiskit实现本节将详细介绍 shor 算法以及通过开源库 qiskit 实现该算法的详细过程

本节将详细介绍shor算法以及通过开源库qiskit实现该算法的详细过程,更细致全面的内容请移步https://www.bilibili.com/video/BV1a4411M7cU?p=5

Shor算法简介

算法执行步骤

设待分解的大数为N,它的平方用二进制表示有 L L L位,即 N 2 < 2 L < 2 N 2 N^2<2^L<2N^2 N2<2L<2N2,选用的周期性函数为余函数类
f ( x ) = a x m o d N ( 式 1 ) f(x) = a^x mod N(式1) f(x)=axmodN1
这里 a ( a < N ) a(a
a(a<N)
是任选的一个与N互为素数的整数,x取从0到 2 L 2^L 2L的整数值
明显可以看出, f ( x ) f(x) f(x)所取的值属于正整数集合 1 , 2 , … , N − 1 {1,2,\dots,N-1} 1,2,,N1,且是周期性函数。
那么一旦求出了周期T,设T为偶数(若求出T为奇数,则另选 a a a重来),则令 A = a T 2 + 1 , B = a T 2 − 1 A=a^\frac{T}{2}+1,B=a^\frac{T}{2}-1 A=a2T+1,B=a2T1,求 ( A , N ) (A,N) (A,N) ( B , N ) (B,N) (B,N)的最大公约数C和D。那么由数论的知识可知C和D就是N的素因子,算法执行完毕。
那么现在还剩下一个问题没有解决,那就是如何求周期T,一旦周期求出来,那么质因子也能够轻而易举的计算出来。
首先取两组各有L个量子比特的存储器,通过幺正变换实现以下的纠缠状态
∑ i = 1 n ∣ x 1 > ⨂ ∣ f ( x 1 ) > = ∣ x 1 > ⨂ ∣ f ( x 1 ) > + ∣ X 2 > ⨂ ∣ f ( x 2 ) > + . . . + ∣ x n > ⨂ ∣ f ( x n ) > \sum_{i=1}^n{|x_1>\bigotimes|f(x_1)>}\\ =|x_1>\bigotimes|f(x_1)> + |X_2>\bigotimes|f(x_2)>+…+|x_n>\bigotimes|f(x_n)> i=1nx1>f(x1)>=x1>f(x1)>+X2>f(x2)>+...+xn>f(xn)>
式子中的 f ( x ) f(x) f(x)就是式1定义的余函数。 n = 2 L n=2^L n=2L,为了找到整体的周期,我们把x也转换成周期为T的函数,通过离散傅里叶变换就可以实现。
∣ x > = 1 ( 2 L ) ∑ k = 0 2 L − 1 e 2 π i k x / 2 L ∣ k > ( 式 2 ) |x>=\frac{1}{\sqrt(2^L)}\sum_{k=0}^{2^L-1}e^{2\pi ikx/2^L |k>}(式2) x>=(
2L)
1
k=02L1e2πikx/2Lk>2

然后将 x x x代入量子比特纠缠态得到式3
∣ ψ > = 1 2 L ∑ x = 0 2 L − 1 ∑ k = 0 2 L − 1 e 2 π i k x / 2 L ∣ k > ⨂ f ( x ) > |\psi>=\frac{1}{\sqrt2^L}\sum_{x=0}^{2^L-1}\sum_{k=0}^{2^L-1}e^{2\pi ikx/2^L} |k>\bigotimes f(x)> ψ>=2
L
1
x=02L1k=02L1e2πikx/2Lk>
f(x)>

这个式子看起来很复杂,其实只不过是将式2代入式1后合并整理得到的结果
由于 f ( x ) f(x) f(x)具有周期性,式子中可以合并同类项,并且由于正交基的存在,大部分项也可以相消,只有k取下列值时系数不为零:
k = [ m 2 L T ] ( m = 0 , 1 , … , T − 1 ) k=[m\frac{2^L}{T}](m=0,1,\dots,T-1) k=[mT2L]m=0,1,T1
那么当 k ≠ 0 k\not=0 k=0
2 L / k ≈ T m 2^L/k \approx \frac{T}{m} 2L/kmT
对k存储器进行测量,能够得到k的本征值, L L L m m m又已知,那么显然就能解出周期 T T T的值啦。随后就能根据之前已经说明的公式求出 A , B A,B A,B进而求出大数N的两个质因子。
上述公式中余函数是Shor精心挑选的用来处理此类问题的较合适的周期函数,记牢就可以了。其次就是函数转化为傅里叶级数这一部分需要去巩固一下高数相关的知识。事实上,非周期函数可以通过对称找到合适的变换。



































Shor算法的简单实现(调包)

from qiskit import IBMQ from qiskit.aqua import QuantumInstance from qiskit.aqua.algorithms import Shor IBMQ.enable_account('ENTER API TOKEN HERE') # 输入自己的令牌 provider = IBMQ.get_provider(hub='ibm-q') backend = provider.get_backend('ibmq_qasm_simulator') # 指定量子设备 print('\nShors算法执行中') factors = Shor(21) # 分解551 result_dict = factors.run(QuantumInstance(backend, shots=1, skip_qobj_validation=False)) result = result_dict['factors'] # 获得分解结果 print(result) 

运行之后返回一个数组,内容为[3,7],也就是分解的结果。当分解的是大数时,运算速度与传统的方式就会出现很大的差别。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/212475.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月18日 下午7:58
下一篇 2026年3月18日 下午7:58


相关推荐

  • FindWindow和FindWindowEx

    FindWindow和FindWindowEx函数型:HWNDFindWindow(LPCTSTRIpClassName,LPCTSTRIpWindowName);IpClassName:指向一个指定了类名的空结束字符串或一个标识类名字符串的成员的指针。如果该参数为一个成员,则它必须为前次调用theGlobaIAddAtom函数产生的全局成员。该成员为16位,必须位于lpClassName的低16位,高位必须为0。如果为NULL,

    2022年5月31日
    40
  • 深入理解Java反射「建议收藏」

    深入理解Java反射「建议收藏」要想理解反射的原理,首先要了解什么是类型信息。Java让我们在运行时识别对象和类的信息,主要有2种方式:一种是传统的RTTI,它假定我们在编译时已经知道了所有的类型信息;另一种是反射机制,它允许我们在

    2022年7月1日
    27
  • littlevgl移植_嵌入式ubuntu系统

    littlevgl移植_嵌入式ubuntu系统总述Littlevgl相比较于安卓、QT,占用资源少、使用简单,所以在linux系统下使用Littlevgl优势也比较明显。移植准备工作源码:lvgl:https://github.com/littlevgl/lvgl驱动:lv_drivers:https://github.com/littlevgl/lv_drivers例子:lv_examples:https://github.com/littlevgl/lv_examples下载慢可以将上面链接先导入到码云上再下载。配置工作源码

    2025年11月19日
    5
  • java中assertEquals_Junit 测试: assertEquals的使用

    java中assertEquals_Junit 测试: assertEquals的使用我写了如下的一个类 importjava math BigDecimal publicclassD publicBigDec floatf1 floatf2 BigDecimalfb newBigDecima f1 BigDecimalfb newBigDecim 我写了如下的一个类 importjava math BigDecimal

    2026年3月19日
    3
  • 在PyCharm中穿件Vue项目

    在PyCharm中穿件Vue项目0 在 PyCharm 中穿件 Vue 项目 需要先安装 Vue js 的插件完成安装之后重启 PyCharm 1 在 Python 中新建 Vue js 项目 2 创建的项目时提示不要使用大写的字母作为项目名 3 等待下载解释器

    2026年3月16日
    1
  • 基于Distiller的模型压缩工具简介

    基于Distiller的模型压缩工具简介Distiller 简介

    2026年3月20日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号