解説
はじめに、ゼロ状態 の1ビット目に ゲートを作用させます。
次に、この量子状態 に対して、制御 ゲートを作用させ、 と の重ね合わせ状態を生成します。 の振幅を完成形の振幅 にすることを考えると、回転角 は以下の連立方程式を解くことで求めることができます。
この方程式を解くと、 の範囲で次の解が得られます。
よって、量子状態 に対して1ビット目を制御ビット、2ビット目を標的ビットとした回転角 の制御 ゲートを作用させます。
そして、2ビット目を制御ビット、1ビット目を標的ビットとして制御 ゲートを作用させます。
このような操作(制御 ゲートと制御 ゲートを順に作用させること)を計 回繰り返すことで、この問題を解くことができます。
解答例
解答例は以下の通りです。
import math
from qiskit import QuantumCircuit
def solve(n: int) -> QuantumCircuit:
qc = QuantumCircuit(n)
theta = [2 * math.atan(math.sqrt(i)) for i in range(n - 1, 0, -1)]
qc.x(0)
for i in range(n - 1):
qc.cry(theta[i], i, i + 1)
qc.cx(i + 1, i)
return qc