解説
本問では次の状態遷移を実現するオラクル O を実装します。
∣x⟩nOexp(2m2πif(x))∣x⟩n
遷移後の状態は次のように各量子ビットごとに独立に分解できます。
exp(2m2πif(x))∣x⟩n=exp(2m2πi(S0x0+⋯+Sn−1xn−1))∣x0⋯xn−1⟩=exp(2m2πiS0x0)∣x0⟩⊗exp(2m2πiS1x1)∣x1⟩⊗⋯⊗exp(2m2πiSn−1xn−1)∣xn−1⟩
よって、各量子ビット xi に対して θ=2πSi/2m の位相シフトゲートを作用させることでこの問題を解くことができます。
n=3 の回路図を次に示します。
回路の深さは 1 です。
解答例
解答例は以下の通りです。
import math
from qiskit import QuantumCircuit
def solve(n: int, m: int, S: list[int]) -> QuantumCircuit:
qc = QuantumCircuit(n)
for i in range(n):
theta = 2 * math.pi * S[i] / 2**m
qc.p(theta, i)
return qc