解説
のときのみ、 にアダマールゲート を作用させる量子回路を実装する問題です。
では、重ね合わせ状態の中の特定の計算基底状態 のときのみ、 にアダマールゲート を作用させるにはどうすれば良いでしょうか?
これは次の操作を順に行うことによって実現できます。
- 操作 1 : の全ての量子ビットに対して ゲートを作用させる。
- 操作 2 : を制御ビット、 を標的ビットとする複数制御アダマールゲート1を作用させる。
- 操作 3 : 操作 1 の逆操作を行い、 を元の状態に戻す。
よって、のとき
という状態遷移が成り立つため、この問題を解くことができます。
の場合の量子回路は次のように表されます。

回路の深さは です。
解答例
解答例は以下の通りです。
from qiskit import QuantumCircuit, QuantumRegister
from qiskit.circuit.library import HGate
def solve(n: int) -> QuantumCircuit:
m, k = QuantumRegister(1), QuantumRegister(n)
qc = QuantumCircuit(m, k)
qc.x(k)
qc.compose(HGate().control(len(k)), [*k, m[0]], inplace=True)
qc.x(k)
return qc
通常、制御ビットは で制御を行いますが、次のように を使って制御する方法で記述することもできます。
from qiskit import QuantumCircuit, QuantumRegister
from qiskit.circuit.library import HGate
def solve(n: int) -> QuantumCircuit:
m, k = QuantumRegister(1), QuantumRegister(n)
qc = QuantumCircuit(m, k)
qc.compose(HGate().control(len(k), ctrl_state=0), [*k, m[0]], inplace=True)
return qc