練習部分 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。 您的輸出會顯示在終端機的偵錯主控台上。
結果是 Zero 或 One,每個都有 50% 的機會。 在量子計算機中,這個位元的測量值是真正隨機的。 多次運行該程序,親自查看結果如何變化。
在下一個單元中,您將結合多個隨機位元來實作量子隨機數產生器的第二部分。