`
somefuture
  • 浏览: 1089758 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

第一个Q#程序:量子叠加

 
阅读更多

在这篇文章里我们会写一个Q#程序,Hello world级别的。

 

对于量子理论,我并不很了解。同事对于Q#也不太了解。所以这篇文章并不会研究程序运行的原理,只是看一下结果,表明Q#的能力。

 

打开已经扩展了Q#能力的VS 2017。新建一个项目,选择C#下面的Q# Application。起名叫Bell。

VS会帮我们创建好一个Operation.cs文件和一个Driver.qs文件。

operation,操作,就类似与C#和java里的静态方法。

 

右键qs文件,将它重命名为Bell.qs。

打开Bell.qs,将操作名Operation改成Set。并添加两个参数:desired: Result, q1: Qubit。

namespace Quantum.Bell
{
    open Microsoft.Quantum.Primitive;

    operation Set (desired: Result, q1: Qubit) : ()
    {
        body
        {

        }
    }
}

 在操作体里面写如下代码

            let current = M(q1);

            if (desired != current)
            {
                X(q1);
            }

 Q#的输入和输出都是元组,就是用小括号包着的0个或多个参数。它的参数类型和方法返回值都是后置的,这和其他某些语言比较类似。

操作里面除了可以有body块外,还可以有adjoint块、controlled块、controlled adjoint块。这里没用上。

 

接下来和Set平级再加一个操作:

    operation BellTest (count : Int, initial: Result) : (Int,Int)
    {
        body
        {
            mutable numOnes = 0;
            using (qubits = Qubit[1])
            {
                for (test in 1..count)
                {
                    Set (initial, qubits[0]);

                    let res = M (qubits[0]);

                    // Count the number of ones we saw:
                    if (res == One)
                    {
                        set numOnes = numOnes + 1;
                    }
                }
                Set(Zero, qubits[0]);
            }
            // Return number of times we saw a |0> and number of times we saw a |1>
            return (count-numOnes, numOnes);
        }
    }

 这样Q#的代码就写好了。

 

然后去写C#驱动。

打开Driver.cs,在Main方法里写

     using (var sim = new QuantumSimulator())
            {
                // Try initial values
                Result[] initials = new Result[] { Result.Zero, Result.One };
                foreach (Result initial in initials)
                {
                    var res = BellTest.Run(sim, 1000, initial).Result;
                    var (numZeros, numOnes) = res;
                    System.Console.WriteLine(
                        $"Init:{initial,-4} 0s={numZeros,-4} 1s={numOnes,-4}");
                }
            }
            System.Console.WriteLine("Press any key to continue...");
            System.Console.ReadKey();

 

 

现在可以构建了,直接按一下F5就行。

如果输出是下面这样 就是可以了

 

Init:Zero 0s=1000 1s=0
Init:One  0s=0    1s=1000
Press any key to continue...

 

如果在BellTest操作中的M方法前加入X方法,结果就会相反:

                    X(qubits[0]);
                    let res = M (qubits[0]);

 

如果把X方法再改成H方法(哈德玛门),结果就会不一样

Init:Zero 0s=484  1s=516
Init:One  0s=522  1s=478

 这个就是传说中的量子叠加!

 

关于更多量子门操作的信息,可以简单百度一下:https://baike.baidu.com/item/%E9%87%8F%E5%AD%90%E9%97%A8/12646873?fr=aladdin

1
0
分享到:
评论

相关推荐

    量子计算在国防电子器件中的潜力.pptx

    - **量子纠缠**:当两个或多个量子比特之间形成纠缠关系时,一个量子比特的状态变化会瞬间影响另一个量子比特的状态,即使它们相隔很远。这种现象对于实现超高效的计算任务至关重要。 这些基本原理使量子计算机能够...

    2024量子信息网络产业联盟:量子人工智能技术白皮书.pdf

    随后,报告深入分析了量子人工智能技术的三大基本原理:量子比特、量子叠加与量子纠缠,并阐述了这些原理如何为量子计算与人工智能的结合提供强大动力。在关键技术部分,白皮书详细介绍了量子人工智能所涵盖的平台...

    量子计算与量子信息

    一个量子比特可以同时处于0和1两种状态的叠加态,这种特性使得量子计算机能够并行处理大量信息。 2. **量子叠加**:量子比特的叠加态允许它同时表示多个经典状态,这是量子计算优越性的基础之一。 3. **量子纠缠**:...

    量子计算与算法应用.pptx

    1. **量子叠加**:量子叠加是一种量子现象,指量子位可以同时存在于多个状态之中。这种特性是量子计算能够实现并行计算的基础。 2. **量子纠缠**:量子纠缠是一种非经典的量子现象,当两个或多个量子位发生纠缠后,...

    量子计算科普:量子计算教程与量子战略.pdf

    第一步:选择量子精英团队 贵公司可能需要进一步了解量子计算的预期收益。以下是入门方法: * 将企业内的一些领军专业人才指定为“量子精英”。 * 为这些“量子精英”充电,帮助他们了解何为量子计算、对行业的...

    量子计算理论与实现(英文版)

    - **量子态叠加**:量子态叠加允许量子位处于多个状态的线性组合,这是量子并行性的基础。 - **量子纠缠**:量子纠缠是指两个或更多量子位之间存在的一种特殊关联,这种关联使得它们的状态相互依赖。 ##### 3.3 ...

    量子信息网络概念原理与发展前景初探.docx

    量子信息网络作为连接量子计算节点、量子传感器等量子信息处理系统的基础设施,通过量子态信息的传输,实现了不同量子信息处理系统的互联与组网,从而成为未来量子信息技术发展的重要方向之一。 #### 二、量子信息...

    量子计算与宗教神秘主义.pptx

    - **流动性与不确定性**:量子叠加挑战了物体在任何时刻只能处于一个明确状态的传统观念,这一点与神秘体验中对实相流动性和不确定性的描述非常契合。 - **意识的作用**:量子力学中的波函数坍缩需要一个观察者来...

    量子科技科普:量子计算机、量子霸权与量子位.pdf

    量子科技科普:量子计算机、量子霸权与量子位.pdf 是一篇关于量子科技的科普文章,主要介绍了量子计算机、量子霸权和量子位的概念和原理。 量子计算机是一种基于量子力学理论的计算机,它可以进行高速运算和存储...

    量子并行计算.pptx

    - **叠加态**:量子比特的一个重要特性是它能够同时处于多个状态,即所谓的叠加态。这种能力使得一个量子比特能够存储比经典比特更多的信息。 - **信息存储**:由于叠加性,单个量子比特能够存储比二进制的0或1更为...

    VS2017编写Q#量子计算Helloworld

    该套件包括 Q# 编程语言和编译器以及一个本地量子计算模拟器,并与Visual Studio完全集成 还有一个基于 Azure 的模拟器,官员在12月11日发布的声明中称,开发人员可以模拟 40 多个逻辑量子计算能力,以及文档库和...

    量子密码学在通信安全中的应用.pptx

    - **原理概述**:BB84协议是第一个提出的量子密钥分发协议,通过随机选择正交基来发送和接收量子态,以生成共享密钥。 - **错误检测与纠正**:通信双方通过公开信道交换基选择信息,并比较一致的测量结果,识别出...

    量子计算机

    例如,2016年中国成功发射了世界上第一颗量子科学实验卫星“墨子号”,这标志着量子通信技术迈出了重要的一步。此外,国际上多家科研机构和企业也在积极研发量子计算机原型机,如IBM、谷歌等公司都在努力推进量子...

    Q#的运行时组件_C#_C++_下载.zip

    Q#是一种由微软开发的量子编程语言,用于构建量子算法和程序。Q#运行时组件是执行Q#代码所必需的软件基础设施,它允许在经典计算机上模拟量子计算过程,或者与实际的量子硬件进行交互。这个“Q#的运行时组件_C#_C++_...

    算法源码-优化与控制:量子遗传算法代码.zip

    1. **量子比特与经典比特**:与经典计算机中的二进制位(0或1)不同,量子比特可以处于0和1的叠加态,这意味着一个量子比特可以同时表示多个状态,这是量子计算的并行性基础。 2. **叠加态**:在量子遗传算法中,...

    量子计算和量子通信技术行业市场分析.pptx

    1. **绝对安全性**:量子密钥分发技术确保通信双方能够建立一个只有他们自己知道的秘密密钥。 2. **不可复制性**:根据量子力学原理,无法精确复制未知量子态,这意味着任何尝试复制量子信息的行为都会破坏原始信息...

    量子计算算法与应用-第1篇.pptx

    这意味着一个量子比特可以同时表示0和1的信息,这种特性使得量子计算机能够并行处理大量的信息。 ##### 2. 量子纠缠 量子纠缠是量子计算中的另一个重要概念。当两个或多个量子比特之间发生纠缠时,它们的状态就会...

    量子计算加速.pptx

    - **叠加原理**:量子位能够同时处于多个状态的叠加态中,这一特性使得量子计算能够同时处理多个可能的解,从而达到指数级的加速效果。 - **纠缠**:量子位之间形成的纠缠关系使得量子计算能够在处理复杂问题时表现...

Global site tag (gtag.js) - Google Analytics