解説
計算基底状態 のみに位相シフトゲート を作用させる量子回路を実装する問題です。
では、重ね合わせ状態の中の特定の計算基底状態 にのみ位相シフトゲート を作用させるにはどうすればよいでしょうか?
これは次のように実現できます。
- のうち、 であるようなインデックス に対して、 ゲートを作用させる。こうして、 を に変換する。
- ビットを制御ビット、残りの ビットを標的ビットとする複数制御位相シフトゲートを作用させる。このとき、位相シフトゲートは重ね合わせ状態の中の計算基底状態 にのみ作用します。
-
- の逆操作を行い、 を に戻す。
この操作を実装することでこの問題を解くことができます。
の場合の量子回路は次のように表されます。

回路の深さは です。
解答例
解答例は以下の通りです。
from qiskit import QuantumCircuit
def solve(n: int, L: int, theta: float) -> QuantumCircuit:
qc = QuantumCircuit(n)
for i in range(n):
if not (1 << i) & L:
qc.x(i)
if n == 1:
qc.p(theta, n - 1)
else:
qc.mcp(theta, list(range(n - 1)), n - 1)
for i in range(n):
if not (1 << i) & L:
qc.x(i)
return qc