量子计算-随机数发生器
本节,我们将使用量子计算来制作一个随机数发生器。
如果你已经具备以下的基础知识:
进制转换
C#基本语法(或者有一定编程经验)
对于量子计算有一点了解
那你将在下面的描述中快速开始你的编码,如果对于以上基础知识并不了解,也不要担心,也许你可以在本节中完成量子计算的快速入门。
1.初窥量子计算,我们首先要了解一个概念,叠加态
下面,我们假设将一只猫关在装有少量镭和氰化物的密闭容器里。镭的衰变存在几率,如果镭发生衰变,会触发机关打碎装有氰化物的瓶子,那么猫就会死;如果镭不发生衰变,那么猫就存活。由于放射性的镭处于衰变和没有衰变两种状态的叠加,这只既死又活的猫就是所谓的“薛定谔猫”。在未被观测之前,这只猫也就处于死猫和活猫的叠加状。
注意:上述只是假设!
2.假设我们现在拥有一位量子比特,那么我们该怎样构建一个随机数发生器?
有一个这样的二进制数,他的每一位都由处于叠加态(即0又1)的量子比特观测得来,这样我们就得到了一个随机数。
我将在下方的表格(知乎的富文本编辑器处理不了md的表格,所以这里就没有表格了)中列出一些步骤,以此让我们对上述的方法更加直观:
step1:让量子比特处于叠加态
step2:观测量子比特
step3:将量子比特的观测值放入字符串
step4:判断字符串的长度是否大于等于我们所需随机数的上界的二进制数的长度,若小于,则进行 step1,若大于等于,则进行step5
step5:将字符串转换成整数
step6:判断整数是否大于随机数上界,若大于,则恢复初始状态,进行step1,若小于等于,则输出整数
在step4中,我们要牢记一点,字符串所表示的是一个二进制数,那么他的上界应该是2^n,n是字符串长度。反过来,我们所需的随机数上界转换成二进制数的位数就是:以2为底随机数上界的对数的上取整
log2max
注意:我加粗了上取整,这是很重要的,因为一个二进制数不可能有0.x位(x为任意正整数)。
到这里,我们已经了解了如何用一位量子比特来构建一个随机数,接下来就要开始编码的准备阶段了。
我们需要在计算机中安装以下编码所需的软件:
Visual Studio 2019
并为Visual Studio 2019添加.NET core工作负载
安装Quantum Development Kit
完成上述步骤后,我们就可以开始编码了:
1. 创建一个Q#Application
2. 在解决方案资源管理器中可以看到Driver.cs和Program.qs.
3. 将Driver.cs的内容替换为以下内容:
using System;4.将Program.qs的内容替换为以下内容:
namespace Quantum.Qshape_random {在Program.qs中,我们仍然遗留了一些问题,例如H为什么可以让量子比特成为叠加态,如何观测量子比特的值等,这些问题需要一些数学(物理)模型来一一解释。在下次解释他们之前,我们应该具备:
这一部分的数学知识,但这并不是绝对必要的,因为你同样可以在后续的部分中快速入门,如果你对这部分这很有兴趣,可以先学习关于布洛赫球的相关知识。
最后,还有一点问题请教各位,关于知乎的markdown导入,我这里是代码部分和表格都有问题,大家在知乎写东西的时候是就用知乎的富文本编辑器直接写吗(尝试了两个转换工具,效果也不是很好)?
下一篇:量子计算的突破与行业应用