B2: Convert Bit-Flip into Phase-Flip I

実行時間制限:3 秒

メモリ制限:512 MiB

配点:200点

Writer:Not_Leonian

解説

xn01\ket{x}_n\ket{0}_1 にオラクル OO を作用させると、以下のようになります。

xn01O{xn11(f(x)=1)xn01(f(x)=0)\begin{equation} \ket{x}_n \ket{0}_1 \xrightarrow{O} \begin{cases} \ket{x}_n \ket{1}_1 & (f(x) = 1) \\ \ket{x}_n \ket{0}_1 & (f(x) = 0) \end{cases} \end{equation}

さらに、右端の量子ビットに ZZ ゲートを作用させると、以下のようになります。

{xn11(f(x)=1)xn01(f(x)=0)Z{xn11(f(x)=1)xn01(f(x)=0)\begin{equation} \begin{cases} \ket{x}_n\ket{1}_1 & (f(x)=1) \\ \ket{x}_n\ket{0}_1 & (f(x)=0) \end{cases} \xrightarrow{Z} \begin{cases} -\ket{x}_n\ket{1}_1 & (f(x)=1) \\ \ket{x}_n\ket{0}_1 & (f(x)=0) \end{cases} \end{equation}

再度オラクル OO を作用させると、以下のようになり、期待される操作が実装できたことになります。

{xn11(f(x)=1)xn01(f(x)=0)O{xn01(f(x)=1)xn01(f(x)=0)\begin{equation} \begin{cases} -\ket{x}_n\ket{1}_1 & (f(x)=1) \\ \ket{x}_n\ket{0}_1 & (f(x)=0) \end{cases} \xrightarrow{O} \begin{cases} -\ket{x}_n\ket{0}_1 & (f(x)=1) \\ \ket{x}_n\ket{0}_1 & (f(x)=0) \end{cases} \end{equation}

n=3n = 3 の場合の回路図は、以下の通りです。

解答例

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

from qiskit import QuantumCircuit, QuantumRegister
 
 
def solve(n: int, o: QuantumCircuit) -> QuantumCircuit:
    x, y = QuantumRegister(n), QuantumRegister(1)
    qc = QuantumCircuit(x, y)
 
    qc.compose(o, inplace=True)
    qc.z(y)
    qc.compose(o, inplace=True)
 
    return qc