Q# 程序不包含适合入口点的静态 'Main' 方法

Q# Program does not contain a static 'Main' method suitable for an entry point

我正在 Q# 中创建程序。

Problem

给你两个状态为 |00⟩ 的量子比特。您的任务是在它们上创建以下状态: 1/3–√(|00⟩+|01⟩+|10⟩) 您必须实施一个操作,该操作将 2 个量子位的数组作为输入并且没有输出。您的解决方案的 "output" 是它离开输入量子位的状态。

Code

namespace Solution {
    open Microsoft.Quantum.Primitive;
    open Microsoft.Quantum.Canon;
    open Microsoft.Quantum.Math;
    open Microsoft.Quantum.Convert;

    operation Solve (qs : Qubit[]) : Unit
    {
        body
        {
            Ry(ArcCos(Sqrt(2.0/3.0))*2.0,qs[0]);
            (ControlledOnInt(0,H))([qs[0]],qs[1]);
        }
    }    
}

但是当我 运行 它显示以下错误。

Error

CSC : error CS5001: Program does not contain a static 'Main' method suitable for an entry point 

[C:\Users\Pawar\Desktop\HK\codeforces\Q#\Solution\Solution.csproj]

所以我试着把EntryPoint()放在方法声明之前。这向我显示了不同的错误

error QS6231: Invalid entry point. Values of type Qubit may not be used as arguments or return values to entry points. [C:\Users\Pawar\Desktop\HK\codeforces\Q#\Solution\Solution.csproj]

请帮我如何正确 运行 它? 谢谢✌️

为了 运行 Q# 程序作为可执行文件,您需要定义一个 @EntryPoint() 操作。您可以在这个优秀的博客 post 中阅读更多内容:https://qsharp.community/blog/qsharp-entrypoint/

具体来说,在您的情况下,错误消息表明 Qubit[] 不是程序主入口点的有效参数。这是有道理的,因为从命令行执行程序时传递一个量子位数组是没有意义的。而且,您的操作不会打印任何内容或 return 任何结果,因此您将无法看到它在做什么。

您可能应该创建一个 @EntryPoint() 包装器操作,它使用适当的参数调用您现有的操作,可能会打印一些诊断信息,然后 return 一些结果。在你的情况下,你也许可以做这样的事情(注意你需要打开的额外名称空间):

    open Microsoft.Quantum.Diagnostics;
    open Microsoft.Quantum.Measurement;

    @EntryPoint()
    operation SolveForTwoQubits() : Result[]
    {
        using (qubits = Qubit[2])
        {
            Solve(qubits);                 // invoke your existing Solve operation
            DumpMachine();                 // outputs the state of your qubits
            let results = MultiM(qubits);  // measure the qubits
            ResetAll(qubits);              // reset the qubits to the initial state
            return results;                // return the measured results
        }
    } 

这将给出一些如下所示的输出:

# wave function for qubits with ids (least to most significant): 0;1
∣0❭:     0.577350 +  0.000000 i  ==     *******              [ 0.333333 ]     --- [  0.00000 rad ]
∣1❭:     0.577350 +  0.000000 i  ==     *******              [ 0.333333 ]     --- [  0.00000 rad ]
∣2❭:     0.577350 +  0.000000 i  ==     *******              [ 0.333333 ]     --- [  0.00000 rad ]
∣3❭:     0.000000 +  0.000000 i  ==                          [ 0.000000 ]
[Zero,One]