A2: Generate Uniform Superposition State

実行時間制限:3 秒

メモリ制限:512 MiB

配点:200点

解説

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

では、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...0n+...+1...1n)=12ni=02n1i\begin{align} \ket{A} & = \frac{1}{\sqrt{2^n}} (\ket{\underbrace{0...0}_n} + ... + \ket{\underbrace{1...1}_n}) \nonumber\\ &= \frac{1}{\sqrt{2^n}} \sum_{i=0}^{2^n-1} \ket{i} \nonumber \end{align}

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

0...0nHn12n(0...0n+...+1...1n)\ket{\underbrace{0...0}_n} \xrightarrow{H^{\otimes n}} \frac{1}{\sqrt{2^n}} (\ket{\underbrace{0...0}_n} + ... + \ket{\underbrace{1...1}_n})

解答例

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

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

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

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