解説
ヒントの解説
ヒント: まずは を除いた次のオラクルを考えてみましょう。
はじめに を二進展開します。
このとき各計算基底状態の位相変化は各量子ビットごとに分解することができます:
よって、各量子ビットに対して の 位相ゲート を適用することでオラクルを実装することができます。
問題の解説
本問もヒントと同様に各計算基底状態の位相変化は各量子ビットごとに分解することができます:
量子ビット は制御ビットと解釈することができるため、を制御ビットとする の制御位相ゲート を適用することでこの問題を解くことができます。
解答例
解答例は以下の通りです。
import math
from qiskit import QuantumCircuit
def solve(n: int, a: int) -> QuantumCircuit:
qc = QuantumCircuit(n + 1)
for i in range(n):
theta = 2 * math.pi * a * 2**i / 2**n
qc.cp(theta, n, i)
return qc