A2: Generate Uniform Superposition State

実行時間制限:3 秒

メモリ制限:512 MiB

配点:200点

Writer:admin

解説

問題 A1 では、「重ね合わせ状態」にある 11 量子ビットを生成しました。

では、nn 個の量子ビットがそれぞれ重ね合わせ状態にあるとき、nn 個の量子ビットの状態をどのように表現できるでしょうか?

1つの量子ビットを測定すると、計算基底状態 ∣0⟩\ket{0} と ∣1⟩\ket{1} が等しい確率 1/21/2 で観測されることから、nn 個の量子ビット を順に測定すると、∣0...0⟩\ket{0...0} から ∣1...1⟩\ket{1...1} までの 2n2^n 個の計算基底状態が等しい確率 1/2n1/2^{n} で観測されます。

すなわち、この状態 ∣A⟩\ket{A} は 2n2^n 個の計算基底状態の一様な重ね合わせ状態として、次式で表されます。

∣A⟩=12n(∣0...0⟩n+...+∣1...1⟩n)=12n∑i=02n−1∣i⟩\begin{align} \ket{A} & = \frac{1}{\sqrt{2^n}} (\ket{0...0}_n + ... + \ket{1...1}_n) \nonumber\\ &= \frac{1}{\sqrt{2^n}} \sum_{i=0}^{2^n-1} \ket{i} \end{align}

結果として、nn 個の量子ビットそれぞれにアダマールゲートを作用させることで、この問題を解くことができます。

∣0...0⟩n→H⊗n12n(∣0...0⟩n+...+∣1...1⟩n)\begin{equation} \ket{0...0}_n \xrightarrow{H^{\otimes n}} \frac{1}{\sqrt{2^n}} (\ket{0...0}_n + ... + \ket{1...1}_n) \end{equation}

解答例

解答例は以下の通りです。

from qiskit import QuantumCircuit
 
 
def solve(n: int) -> QuantumCircuit:
    qc = QuantumCircuit(n)
 
    qc.h(range(n))
 
    return qc

単に for ループを用いて実装することもできます。

from qiskit import QuantumCircuit
 
 
def solve(n: int) -> QuantumCircuit:
    qc = QuantumCircuit(n)
 
    for i in range(n):
      qc.h(i)
 
    return qc