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]
我正在 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]