解説
∣x⟩n∣0⟩1 にオラクル O を作用させると、以下のようになります。
∣x⟩n∣0⟩1O{∣x⟩n∣1⟩1∣x⟩n∣0⟩1(f(x)=1)(f(x)=0)
さらに、右端の量子ビットに Z ゲートを作用させると、以下のようになります。
{∣x⟩n∣1⟩1∣x⟩n∣0⟩1(f(x)=1)(f(x)=0)Z{−∣x⟩n∣1⟩1∣x⟩n∣0⟩1(f(x)=1)(f(x)=0)
再度オラクル O を作用させると、以下のようになり、期待される操作が実装できたことになります。
{−∣x⟩n∣1⟩1∣x⟩n∣0⟩1(f(x)=1)(f(x)=0)O{−∣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.compose(o, inplace=True)
qc.z(y)
qc.compose(o, inplace=True)
return qc