A3: Generate State 12(02n1)\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})を生成することを考えます。 はじめに、1番目の量子ビットに対して アダマールゲートを作用させます。

00000H(0)12(00000+10000)\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}

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

12(00000+10000)CX(0,1)12(00000+11000)\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}

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

12(00000+11000)CX(0,2)12(00000+11100)\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(0000+1111)\ket{\psi} = \frac{1}{\sqrt{2}} (\ket{00 \cdots 00} + \ket{11 \cdots 11})を生成できます。

12(00000+11100)CX(0,3)CX(0,4)CX(0,n1)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 ゲートを作用させることで 1111\ket{11 \cdots 11} の位相を反転させます。

12(0...0+1...1)Z(0)12(0...01...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