練習部分 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,代表真正的隨機位元。 您可以再次執行程式以查看不同的結果。

在下一個單元中,您會實作量子亂數產生器的第二個階段:結合多個隨機位元來形成更大的數字。