练习第 1 部分 - 创建量子随机位生成器

已完成

在上一单元中,你了解了 Q# 程序的基本构造块。 现在,你已准备好编写第一个量子程序。 在本单元中,你将编写一个生成真正随机位的量子程序。

可通过两个步骤生成量子随机数生成器。 本单元是生成单个随机位的第一步。 若要生成随机位,请在 $\ket{0}$ 状态下分配量子比特,将该量子比特放入叠加状态,然后测量量子比特以生成随机位值 0 或 1。

创建 Q# 程序文件

  1. 打开 Visual Studio Code。
  2. 打开“ 文件 ”菜单,然后选择“ 新建文本文件 ”以创建新文件。
  3. 将文件另存为 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 个% 机会。 量子计算机上的此位的测量值确实是随机的。 多次运行程序,了解结果的更改方式。

在下一个单元中,将多个随机位组合在一起,以实现量子随机数生成器的第二部分。