A3: Generate State 12(∣0⟩−∣2n−1⟩)\frac{1}{\sqrt{2}}\lparen\ket{0}-\ket{2^{n}-1}\rparen I

実行時間制限:3 秒

メモリ制限:512 MiB

配点:300点

Writer:ST12

解説

問題 A2 での解き方を参考に解いていくと方針が立ちやすいので、その下で考えていきましょう。

まず、位相を考慮せずに量子状態 ∣ψ⟩=12(∣0...0⟩+∣1...1⟩)\ket{\psi} = \frac{1}{\sqrt{2}} (\ket{0...0} + \ket{1...1}) を生成することを考えます。 はじめに、11 番目の量子ビットに対して アダマールゲートを作用させます。

∣0000⋯0⟩→H(0)12(∣0000⋯0⟩+∣1000⋯0⟩)\begin{equation} \ket{0000 \cdots 0} \xrightarrow{H(0)} \frac{1}{\sqrt{2}} \lparen \ket{0000 \cdots 0} + \ket{1000 \cdots 0} \rparen \end{equation}

次に、 ∣1000⋯0⟩\ket{1000 \cdots 0} を ∣1100⋯0⟩\ket{1100 \cdots 0} に変化させる必要があります。そこで、11 番目の量子ビットを制御ビットとし、22 番目の量子ビットを標的ビットとする 制御 XX ゲートを利用します。 制御 XX ゲートによって、11 番目の量子ビットが ∣1⟩\ket{1} となる ∣1000⋯0⟩\ket{1000 \cdots 0} に対してのみ、22 番目の量子ビットに XX ゲートを作用させます。

12(∣0000⋯0⟩+∣1000⋯0⟩)→CX(0,1)12(∣0000⋯0⟩+∣1100⋯0⟩)\begin{equation} \frac{1}{\sqrt{2}} \lparen \ket{0000 \cdots 0} + \ket{1000 \cdots 0} \rparen \xrightarrow{CX(0,1)} \frac{1}{\sqrt{2}} \lparen \ket{0000 \cdots 0} + \ket{1100 \cdots 0} \rparen \end{equation}

同様にして、∣1100⋯0⟩\ket{1100 \cdots 0} を ∣1110⋯0⟩\ket{1110 \cdots 0} に変化させるために、11 番目の量子ビットを制御ビットとし、33 番目の量子ビットを標的ビットとする 制御 XX ゲートを作用させます。

12(∣0000⋯0⟩+∣1100⋯0⟩)→CX(0,2)12(∣0000⋯0⟩+∣1110⋯0⟩)\begin{equation} \frac{1}{\sqrt{2}} \lparen \ket{0000 \cdots 0} + \ket{1100 \cdots 0} \rparen \xrightarrow{CX(0,2)} \frac{1}{\sqrt{2}} \lparen \ket{0000 \cdots 0} + \ket{1110 \cdots 0} \rparen \end{equation}

あとは、nn 番目の量子ビットが標的ビットになるまで制御 XX ゲートを繰り返し作用させることで、量子状態 ∣ψ⟩=12(∣00⋯00⟩+∣11⋯11⟩)\ket{\psi} = \frac{1}{\sqrt{2}} (\ket{00 \cdots 00} + \ket{11 \cdots 11}) を生成できます。

12(∣0000⋯0⟩+∣1110⋯0⟩)→CX(0,3) →CX(0,4)⋯→CX(0,n−1)12(∣0...0⟩+∣1...1⟩)\begin{equation} \frac{1}{\sqrt{2}} \lparen \ket{0000 \cdots 0} + \ket{1110 \cdots 0} \rparen \xrightarrow{CX(0,3)} \, \xrightarrow{CX(0,4)} \cdots \xrightarrow{CX(0,n-1)} \frac{1}{\sqrt{2}} (\ket{0...0} + \ket{1...1}) \end{equation}

最後に ZZ ゲートを作用させることで ∣11⋯11⟩\ket{11 \cdots 11} の位相を反転させます。

12(∣0...0⟩+∣1...1⟩)→Z(0)12(∣0...0⟩−∣1...1⟩)\begin{equation} \frac{1}{\sqrt{2}} \lparen \ket{0...0} + \ket{1...1} \rparen \xrightarrow{Z(0)} \frac{1}{\sqrt{2}} \lparen \ket{0...0} - \ket{1...1} \rparen \end{equation}

以上の操作をまとめると、以下のような量子回路が得られます。

解答例

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

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