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

已完成

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

你要分两个阶段来生成量子随机数生成器。 在本单元中,你将实施第一阶段,即生成一个随机位。

创建 Q# 程序

  1. 打开 Visual Studio Code 并选择“文件”>“新建文本文件”以创建新文件。
  2. 将文件另存为 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。 输出将显示在终端的调试控制台中。

结果是 OneZero,表示真正的随机位。 再次运行程序即可看到不同的结果。

在下一单元中,你将实施量子随机数生成器的第二个阶段:组合多个随机位以形成更大的数。