解説
右端の量子ビットに順に X ゲートと H ゲートを作用させると、以下のようになります。
∣x⟩n∣0⟩1X∣x⟩n∣1⟩1H21(∣x⟩n∣0⟩1−∣x⟩n∣1⟩1)
さらに、オラクル O を作用させると、以下のようになります。
21(∣x⟩n∣0⟩1−∣x⟩n∣1⟩1)O{21(∣x⟩n∣1⟩1−∣x⟩n∣0⟩1)21(∣x⟩n∣0⟩1−∣x⟩n∣1⟩1)(f(x)=1)(f(x)=0)
21(∣x⟩n∣1⟩1−∣x⟩n∣0⟩1)=−21(∣x⟩n∣0⟩1−∣x⟩n∣1⟩1) に注目して、右端の量子ビットに順に H ゲートと X ゲートを作用させると、以下のようになり、期待される操作が実装できたことになります。
{21(∣x⟩n∣1⟩1−∣x⟩n∣0⟩1)21(∣x⟩n∣0⟩1−∣x⟩n∣1⟩1)(f(x)=1)(f(x)=0)H{−∣x⟩n∣1⟩1∣x⟩n∣1⟩1(f(x)=1)(f(x)=0)X{−∣x⟩n∣0⟩1∣x⟩n∣0⟩1(f(x)=1)(f(x)=0)
n=3 の場合の回路図は、以下の通りです。
解答例
解答例は以下の通りです。
from qiskit import QuantumCircuit, QuantumRegister
def solve(n: int, o: QuantumCircuit) -> QuantumCircuit:
x, y = QuantumRegister(n), QuantumRegister(1)
qc = QuantumCircuit(x, y)
qc.x(y)
qc.h(y)
qc.compose(o, inplace=True)
qc.h(y)
qc.x(y)
return qc