练习第 1 部分 - 创建量子随机位生成器
在上一单元中,你了解了 Q# 程序的基本构造块。 现在,你已准备好编写第一个量子程序:一个用来生成真正的随机数的量子程序。
你要分两个阶段来生成量子随机数生成器。 在本单元中,你将实施第一阶段,即生成一个随机位。
创建 Q# 程序
- 打开 Visual Studio Code 并选择“文件”>“新建文本文件”以创建新文件。
- 将文件另存为
Main.qs
。 此文件将包含程序的 Q# 代码。
定义 Main
操作
Main
运算是你的程序的入口点。
operation Main(): Result{
// Your code goes here
}
分配量子比特
首先,使用 use
关键字分配一个量子比特。 在 Q# 中,默认情况下,你分配的每个量子比特最初都为 $\ket{0}$ 状态。
operation Main(): Result{
// Allocate a qubit
use q = Qubit();
}
将量子比特置于叠加态
量子比特处于 $\ket{0}$ 状态,这对于生成随机数不是很有用。 你需要将量子比特置于叠加态。 为此,你将 Hadamard 运算 (H
) 应用于量子比特。 Hadamard 运算更改量子比特的状态,并将其置于 $\ket{0}$ 和 $\ket{1}$ 的相等叠加状态。
$$ H \ket{0} = \frac{1}{\sqrt{2}} (\ket{0} + \ket{1}) $$
因为量子比特处于相等的叠加状态,当你度量它时,你有 50% 的机会得到 0,有 50% 的机会得到 1。
operation Main(): Result{
use q = Qubit();
H(q);
}
测量量子比特
此时,量子比特 q
有 50% 的机会在 |0〉 状态下被测到,有 50% 的机会在 |1〉 状态下被测到。 因此,当你测量量子比特时,你将得到一个随机位 0 或 1,二者的概率均为 50%。 此位的值是真正随机的,无法提前知道测量结果。
若要测量量子比特值,请使用 M
运算并将度量值存储在 result
变量中。
operation Main(): Result{
use q = Qubit();
H(q);
let result = M(q);
}
重置量子比特
在 Q# 中,每个量子比特在释放前必须处于 $\ket{0}$ 状态。 使用 Reset(q)
将量子比特重置为零状态。
operation Main(): Result{
use q = Qubit();
H(q);
let result = M(q);
Reset(q);
}
返回度量结果
最后,使用 return
关键字返回度量结果。 此结果是一个随机位,即 0 或 1,概率相等。
operation Main(): Result{
use q = Qubit();
H(q);
let result = M(q);
Reset(q);
return result;
}
最终程序
你的 Main.qs
文件应如下所示。 该程序分配一个量子比特,将其置于叠加状态,测量量子比特,重置量子比特,并返回度量结果。
注意
//
符号表示可选注释,用于解释程序的每个步骤。
operation Main() : Result {
// Allocate a qubit.
use q = Qubit();
// Set the qubit into superposition of 0 and 1 using the Hadamard
H(q);
// Measure the qubit and store the result.
let result = M(q);
// Reset qubit to the |0〉 state.
Reset(q);
// Return the result of the measurement.
return result;
}
运行程序
若要在内置模拟器运行程序,请在 Main
操作上方单击“运行”,或按 Ctrl+F5。 输出将显示在终端的调试控制台中。
结果是 One
或 Zero
,表示真正的随机位。 再次运行程序即可看到不同的结果。
在下一单元中,你将实施量子随机数生成器的第二个阶段:组合多个随机位以形成更大的数。