解説
オラクルの作用後の状態 y′=y⊕x1⊕x2⊕...⊕xn は次のように括弧をつけて、2量子ビットに対する操作 ⊕ の入れ子で表現されます。
y⊕x1⊕x2⊕...⊕xn=(((y⊕x1)⊕x2)⊕...)⊕xn)
すなわち、x1 から xn までそれぞれの量子ビットを制御ビットとし、y を標的ビットとする CX ゲートを合計で n 個作用させることでオラクルを実現できます。
yCX(x1,y)y⊕x1CX(x2,y)y⊕x1⊕x2 ...CX(xn,y)y⊕x1⊕x2⊕...⊕xn
解答例
解答例は以下の通りです。
from qiskit import QuantumCircuit, QuantumRegister
def solve(n: int) -> QuantumCircuit:
x, y = QuantumRegister(n), QuantumRegister(1)
qc = QuantumCircuit(x, y)
for i in range(n):
qc.cx(x[i], y)
return qc