i+1 から n ビット目までのインデックス j に対して、Lj=0 ならば j 番目の量子ビットに X ゲートを作用させる。
i 番目の量子ビットに X ゲートを作用させる。( Xi=0 の場合に −1 をかけるため)
複数制御 Z ゲートを i+1 から n ビット目までを制御ビット、i ビット目を標的ビットとして作用させる。
と 1. の逆操作を行う。
解答例
解答例は以下の通りです。
from qiskit import QuantumCircuitfrom qiskit.circuit.library import ZGatedef solve(n: int, L: int) -> QuantumCircuit: qc = QuantumCircuit(n) for i in range(n): if not (L >> i) & 1: continue for j in range(i + 1, n): if not (L >> j) & 1: qc.x(j) qc.x(i) if i == n - 1: qc.z(i) else: qc.append(ZGate().control(n - i - 1), range(i, n)) qc.x(i) for j in range(i + 1, n): if not (L >> j) & 1: qc.x(j) return qc
[1] J. Sanchez-Rivero et al., “Automatic generation of an efficient less-than oracle for quantum amplitude amplification,” in 2023 IEEE/ACM 4th International Workshop on Quantum Software Engineering (Q-SE), May 2023, pp. 26–33.
(https://arxiv.org/abs/2303.07120)