练习第 1 部分 - 创建量子随机位生成器
在上一单元中,你了解了 Q# 程序的基本构造块。 现在,你已准备好编写第一个量子程序。 在本单元中,你将编写一个生成真正随机位的量子程序。
可通过两个步骤生成量子随机数生成器。 本单元是生成单个随机位的第一步。 若要生成随机位,请在 $\ket{0}$ 状态下分配量子比特,将该量子比特放入叠加状态,然后测量量子比特以生成随机位值 0 或 1。
创建 Q# 程序文件
- 打开 Visual Studio Code。
- 打开“ 文件 ”菜单,然后选择“ 新建文本文件 ”以创建新文件。
- 将文件另存为
Main.qs。
为文件中的随机位生成器 Main.qs 编写 Q# 代码。
定义 Main 操作
Main 操作是你的程序的入口点。 将以下代码复制到 Main.qs 文件中:
operation Main(): Result{
// Your code goes here
}
分配量子比特
若要开始,请使用 use 语句分配一个量子比特。 在 Q# 中,默认情况下,你使用 use 分配的每个量子位都会初始为 $\ket{0}$ 状态。 若要分配单个量子比特,请将以下代码复制到程序中:
operation Main(): Result{
// Allocate a qubit
use q = Qubit();
}
将量子比特置于叠加态
此时,无法从量子比特生成随机位,因为量子比特处于 $\ket{0}$ 状态。 如果测量此量子位的状态,则每次度量都将返回位值 0。
若要从量子比特的测量生成随机位,首先需要将量子比特置于 $\ket{0}$ 状态和 $\ket{1}$ 状态的叠加态中。 若要将量子比特置于叠加状态,请将 Hadamard 运算应用于量子比特。 Hadamard 运算将量子比特从 $\ket{0}$ 状态转换为 $\ket{0}$ 和 $\ket{1}$ 状态的相等叠加。
$$ H \ket{0} = \frac{1}{\sqrt{2}} (\ket{0} + \ket{1}) $$
若要在 Q# 中将 Hadamard 操作应用到量子比特,请使用 H 操作:
operation Main(): Result{
use q = Qubit();
H(q);
}
注意
将量子运算应用于 Q# 中的量子位时,该作不会返回值。 相反,操作会影响量子比特的状态。
测量量子比特
由于量子比特现在处于均等的叠加状态,因此当你测量量子比特时,测量返回 0 的可能性为 50%,测量返回 1 的可能性也为 50%。
若要在 Q# 中度量量子比特值,请使用 M 该作并将度量值存储在变量中 result :
operation Main(): Result{
use q = Qubit();
H(q);
let result = M(q);
}
重置量子比特
在 Q# 中,量子位必须处于 $\ket{0}$ 状态,然后才能释放量子比特。 使用 Reset 将量子比特重置为 $\ket{0}$ 状态。
operation Main(): Result{
use q = Qubit();
H(q);
let result = M(q);
Reset(q);
}
返回度量结果
最后,使用 return 语句返回度量结果。 此结果是一个随机位,即 0 或 1,概率相等。 在 Main.qs 文件中复制以下代码:
operation Main(): Result{
use q = Qubit();
H(q);
let result = M(q);
Reset(q);
return result;
}
运行随机位生成器程序
你创建了一个名为分配量子比特的 Q# 程序 Main.qs ,将量子比特置于相等叠加状态,测量量子比特,重置量子比特,然后返回度量结果。 下面是 Q# 代码的概述:
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。 您的输出显示在终端的调试控制台中。
结果是, Zero 或者 One,每个结果都有 50 个% 机会。 量子计算机上的此位的测量值确实是随机的。 多次运行程序,了解结果的更改方式。
在下一个单元中,将多个随机位组合在一起,以实现量子随机数生成器的第二部分。