周期函数:
f ( x ) = a x m o d N f(x) = a^x \bmod{N} f(x)=axmodN

问题:如何找到一个周期函数的周期r?

Shor’s algorithm

Shor’s solution中函数U: U ∣ y ⟩ ≡ ∣ a y m o d N ⟩ U|y\rangle \equiv |ay \bmod N \rangle U∣y⟩≡∣aymodN⟩

接下来,我们可以多次作用U,便可以得到周期函数f的结果:
U ∣ 1 ⟩ = ∣ 3 ⟩ U 2 ∣ 1 ⟩ = ∣ 9 ⟩ U 3 ∣ 1 ⟩ = ∣ 27 ⟩ ⋮ U ( r − 1 ) ∣ 1 ⟩ = ∣ 12 ⟩ U r ∣ 1 ⟩ = ∣ 1 ⟩ \begin{aligned} U|1\rangle &= |3\rangle & \\ U^2|1\rangle &= |9\rangle \\ U^3|1\rangle &= |27\rangle \\ & \vdots \\ U^{(r-1)}|1\rangle &= |12\rangle \\ U^r|1\rangle &= |1\rangle \end{aligned} U∣1⟩U2∣1⟩U3∣1⟩U(r−1)∣1⟩Ur∣1⟩​=∣3⟩=∣9⟩=∣27⟩⋮=∣12⟩=∣1⟩​

因此第一个想法便是构建叠加态,然后测量相同f(x)的x的叠加态。

So a superposition of the states in this cycle ( ∣ u 0 ⟩ ) (|u_0\rangle) (∣u0​⟩) would be an eigenstate of U:

∣ u 0 ⟩ = 1 r ∑ k = 0 r − 1 ∣ a k m o d N ⟩ |u_0\rangle = \tfrac{1}{\sqrt{r}}\sum_{k=0}^{r-1}{|a^k \bmod N\rangle} ∣u0​⟩=r ​1​k=0∑r−1​∣akmodN⟩

This eigenstate has an eigenvalue of 1, which isn’t very interesting. A more interesting eigenstate could be one in which the phase is different for each of these computational basis states. Specifically, let’s look at the case in which the phase of the kth state is proportional to k:

∣ u 1 ⟩ = 1 r ∑ k = 0 r − 1 e − 2 π i k r ∣ a k m o d N ⟩ U ∣ u 1 ⟩ = e 2 π i r ∣ u 1 ⟩ \begin{aligned} |u_1\rangle &= \tfrac{1}{\sqrt{r}}\sum_{k=0}^{r-1}{e^{-\tfrac{2\pi i k}{r}}|a^k \bmod N\rangle}\\[10pt] U|u_1\rangle &= e^{\tfrac{2\pi i}{r}}|u_1\rangle \end{aligned} ∣u1​⟩U∣u1​⟩​=r ​1​k=0∑r−1​e−r2πik​∣akmodN⟩=er2πi​∣u1​⟩​

∣ u s ⟩ = 1 r ∑ k = 0 r − 1 e − 2 π i s k r ∣ a k m o d N ⟩ U ∣ u s ⟩ = e 2 π i s r ∣ u s ⟩ \begin{aligned} |u_s\rangle &= \tfrac{1}{\sqrt{r}}\sum_{k=0}^{r-1}{e^{-\tfrac{2\pi i s k}{r}}|a^k \bmod N\rangle}\\[10pt] U|u_s\rangle &= e^{\tfrac{2\pi i s}{r}}|u_s\rangle \end{aligned} ∣us​⟩U∣us​⟩​=r ​1​k=0∑r−1​e−r2πisk​∣akmodN⟩=er2πis​∣us​⟩​

We now have a unique eigenstate for each integer value of s where
0 ≤ s ≤ r − 1 0 \leq s \leq r-1 0≤s≤r−1. Very conveniently, if we sum up all these eigenstates, the different phases cancel out all computational basis states except ∣ 1 ⟩ |1\rangle ∣1⟩:

1 r ∑ s = 0 r − 1 ∣ u s ⟩ = ∣ 1 ⟩ \tfrac{1}{\sqrt{r}}\sum_{s=0}^{r-1} |u_s\rangle = |1\rangle r ​1​s=0∑r−1​∣us​⟩=∣1⟩

Example:

在通过U进行变化操作之后,我们得到的结果为:
∣ 1 ⟩ = 1 r ( ∣ u 0 ⟩ + ∣ u 1 ⟩ + ⋯ + ∣ u r − 1 ⟩ ) |1\rangle=\frac{1}{\sqrt{r}}\left(\left|u_{0}\right\rangle+\left|u_{1}\right\rangle+\cdots+\left|u_{r-1}\right\rangle\right) ∣1⟩=r ​1​(∣u0​⟩+∣u1​⟩+⋯+∣ur−1​⟩)

之后通过QPE(Inverse Fourier Transform),测得Phase:
ϕ = s r \phi = \frac{s}{r} ϕ=rs​


coding

import matplotlib.pyplot as plt
import numpy as np
from qiskit import QuantumCircuit, Aer, transpile, assemble
from qiskit.visualization import plot_histogram
from math import gcd
from numpy.random import randint
import pandas as pd
from fractions import Fractiondef c_amod15(a, power):"""Controlled multiplication by a mod 15"""if a not in [2,7,8,11,13]:raise ValueError("'a' must be 2,7,8,11 or 13")U = QuantumCircuit(4)        for iteration in range(power):if a in [2,13]:U.swap(0,1)U.swap(1,2)U.swap(2,3)if a in [7,8]:U.swap(2,3)U.swap(1,2)U.swap(0,1)if a == 11:U.swap(1,3)U.swap(0,2)if a in [7,11,13]:for q in range(4):U.x(q)U = U.to_gate()U.name = "%i^%i mod 15" % (a, power)c_U = U.control()return c_U
# Specify variables
n_
count = 8  # number of counting qubits
a = 7
def qft_dagger(n):"""n-qubit QFTdagger the first n qubits in circ"""qc = QuantumCircuit(n)# Don't forget the Swaps!for qubit in range(n//2):qc.swap(qubit, n-qubit-1)for j in range(n):for m in range(j):qc.cp(-np.pi/float(2**(j-m)), m, j)qc.h(j)qc.name = "QFT†"return qc# Create QuantumCircuit with n_count counting qubits
# plus 4 qubits for U to act on
qc = QuantumCircuit(n_count + 4, n_count)# Initialize counting qubits
# in state |+>
for q in range(n_count):qc.h(q)# And auxiliary register in state |1>
qc.x(3+n_count)# Do controlled-U operations
for q in range(n_count):qc.append(c_amod15(a, 2**q), [q] + [i+n_count for i in range(4)])# Do inverse-QFT
qc.append(qft_dagger(n_count), range(n_count))# Measure circuit
qc.measure(range(n_count), range(n_count))
qc.draw(fold=-1)  # -1 means 'do not fold' qasm_sim = Aer.get_backend('qasm_simulator')
t_qc = transpile(qc, qasm_sim)
qobj = assemble(t_qc)
results = qasm_sim.run(qobj).result()
counts = results.get_counts()
plot_histogram(counts)


rows, measured_phases = [], []
for output in counts:decimal = int(output, 2)  # Convert (base 2) string to decimalphase = decimal/(2**n_count)  # Find corresponding eigenvaluemeasured_phases.append(phase)# Add these values to the rows in our table:rows.append([f"{output}(bin) = {decimal:>3}(dec)", f"{decimal}/{2**n_count} = {phase:.2f}"])
# Print the rows in a table
headers=["Register Output", "Phase"]
df = pd.DataFrame(rows, columns=headers)
print(df)


这个算法中还有一些问题值得讨论,如傅里叶变化究竟如何起作用?
其实简单来说,就是把与结果无关的状态通过干涉,让其振幅为0。

其他的一些问题也欢迎讨论,对这个算法的思考就不一一列居于此。

量子计算为算法指数加速:Shor‘s algorithm相关推荐

  1. 谷歌,IBM ,微软:2019年量子计算驱动区块链加速落地

    谷歌,IBM ,微软:2019年量子计算驱动区块链加速落地 2019年,AI和大数据有加速发展的趋势,在区块链 领域,除了不断推陈出新的各种公链项目,让人目不暇接,但是大多是1001夜的天方夜谭,没有 ...

  2. BM提供支持云的量子计算平台,以加速创新

    IBM研究院日前首次宣布公众可试用IBM量子处理器.从5月4日开始,IBM通过云服务,使所有有兴趣亲自实践的人们可以接触到量子处理器,帮助科学家和科研社区加速科技创新,并在该领域激发出更多的前沿应用. ...

  3. 行业看点 | 英特尔成功开发超导量子计算芯片 推动产业加速发展

    量子计算将会成为下一次技术革命的核心,你可能认为它还很遥远,实际上量子计算会比预料的来得早.近期,英特尔在量子芯片方面取得突破,让量子计算朝着现实前进了一大步. 继IBM公司发布了自主量子处理器,谷歌 ...

  4. 以色列量子设计平台Classiq :加速量子计算机算法研发

    Classiq正在解决量子计算面临的一些挑战难点,以帮助企业团队探索如何加速量子比特数大规模扩展.(图片来源:网络) 创建设计几乎不可能的量子电路 即使随着硬件的发展,未来能创造出具有数百.数千甚至数 ...

  5. 量子计算(11)量子算法1:可逆线路

    哈喽哈喽大家好呀!又到了一周一度小编分享量子计算的时刻啦!几天不见,大家是不是甚是想念小编呢.之前答应大家的,本周要开始进入量子算法的学习.提到算法,大家会想到什么?是深度优先算法?哈夫曼编码算法?排 ...

  6. 2022全球量子计算产业发展报告(中)

    一.云平台进展 云计算经过近二十年发展已趋于成熟.随着量子计算的快速发展,量子计算与云计算有机结合,产生了"量子计算云平台",极大地克服了目前量子计算机制造成本昂贵.维护难度高.占 ...

  7. IBM:决胜量子计算五大战略!商用近在咫尺

    量子计算已接近商业化阶段,有很大的潜力改变我们的世界.利用量子计算的独特能力来解决特定类型问题的早期采用者,有可能在建立新型业务模式方面实现突破.富有远见卓识的企业已经开始调整战略方向,为新兴的量子计 ...

  8. activate tensorflow_“量子固件”来了!利用 TensorFlow 提升量子计算硬件性能

    客座文章 / Michael J. Biercuk.Harry Slatyer 和 Michael Hush,来自Q-CTRL Google 近期宣布推出 TensorFlow Quantum,这是一 ...

  9. 量子计算是否会终结区块链?

    点击上方"CSDN",选择"置顶公众号" 关键时刻,第一时间送达! 有专家认为量子计算可能会淘汰区块链.Google 和 IBM 等科技巨头都对量子计算表现出了 ...

最新文章

  1. HTML5 script元素async,defer异步加载
  2. onenote怎么同步到电脑_OneNote“此分区文件似乎已损坏”的解决办法
  3. 配置windows驱动开发环境
  4. Distributed Systems笔记-Web Service Design Patterns
  5. ngrok编译和安装
  6. VS工程切换cuda版本
  7. Mysql 求时间 between 昨天 and 上个月的今天 等时间函数
  8. 【TSP】基于matlab GUI蚁群算法求解旅行商问题【含Matlab源码 1032期】
  9. 逻辑代码自动生成相关技术概述
  10. 第9节-做网站有哪些收入接入点
  11. 手机app抓包工具/web抓包工具之Fiddler——手机app抓包设置
  12. 图片表格如何转换成excel表格
  13. android三星s8底部菜单,【Android】三星Galaxy S8及S8+的屏幕适配
  14. 三菱PLC伺服XZ轴定位程序 程序都有注释、注释全面,用的三菱FX3U系列plc
  15. 2017百度之星资格赛 1003:度度熊与邪恶大魔王(DP)
  16. 英语学习打卡day1
  17. Linux——服务器文件备份(一)
  18. 拓嘉辰丰电商:拼多多宝贝排名查询方法
  19. 仿网易云音乐html代码,仿网易云音乐外链播放器UI的HTML5音乐播放器插件
  20. 视频教程:Java七大外企经典面试套路之基础篇

热门文章

  1. SWPU新生赛2021 Crypto部分WriteUp
  2. C++ Win32程序编写入门
  3. 小旋风蜘蛛池让搜狗收录快速增长
  4. 误用rm -rf *文件修复及修改rm指令为mv
  5. gcc: buildin函数: __builtin_unreachable __builtin_constant_p;__atomic_load_n
  6. Qt按键键值 与 相关字符串 的映射表
  7. 人工智能机器学习底层原理剖析,人造神经元,您一定能看懂,通俗解释把AI“黑话”转化为“白话文”
  8. Admob广告收入怎么算的?
  9. 浅析Windows2000/XP服务与后门技术(经典后门T-cmd的源码)
  10. DNS信息查询综合实验