練習部分 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。 您的輸出會顯示在終端機的偵錯主控台上。

結果是 ZeroOne,每個都有 50% 的機會。 在量子計算機中,這個位元的測量值是真正隨機的。 多次運行該程序,親自查看結果如何變化。

在下一個單元中,您將結合多個隨機位元來實作量子隨機數產生器的第二部分。