解説
問題 A2 での解き方を参考に解いていくと方針が立ちやすいので、その下で考えていきましょう。
まず、位相を考慮せずに量子状態 ∣ψ⟩=21(∣0...0⟩+∣1...1⟩)を生成することを考えます。
はじめに、1番目の量子ビットに対して アダマールゲートを作用させます。
∣0000⋯0⟩H(0)21(∣0000⋯0⟩+∣1000⋯0⟩)
次に、 ∣1000⋯0⟩ を ∣1100⋯0⟩ に変化させる必要があります。そこで、1番目の量子ビットを制御ビットとし、2番目の量子ビットを標的ビットとする 制御 X ゲートを利用します。
制御 X ゲートによって、1番目の量子ビットが ∣1⟩ となる ∣1000⋯0⟩ に対してのみ、2番目の量子ビットに X ゲートを作用させます。
21(∣0000⋯0⟩+∣1000⋯0⟩)CX(0,1)21(∣0000⋯0⟩+∣1100⋯0⟩)
同様にして、∣1100⋯0⟩ を ∣1110⋯0⟩ に変化させるために、1番目の量子ビットを制御ビットとし、3番目の量子ビットを標的ビットとする 制御 X ゲートを作用させます。
21(∣0000⋯0⟩+∣1100⋯0⟩)CX(0,2)21(∣0000⋯0⟩+∣1110⋯0⟩)
あとは、n番目 の量子ビットが標的ビットになるまで制御 X ゲートを繰り返し作用させることで、量子状態 ∣ψ⟩=21(∣00⋯00⟩+∣11⋯11⟩)を生成できます。
21(∣0000⋯0⟩+∣1110⋯0⟩)CX(0,3)CX(0,4)⋯CX(0,n−1)21(∣0...0⟩+∣1...1⟩)
最後に Z ゲートを作用させることで ∣11⋯11⟩ の位相を反転させます。
21(∣0...0⟩+∣1...1⟩)Z(0)21(∣0...0⟩−∣1...1⟩)
以上の操作をまとめると、以下のような回路が得られます。
解答例
解答例は以下の通りです。
from qiskit import QuantumCircuit
def solve(n: int) -> QuantumCircuit:
qc = QuantumCircuit(n)
qc.h(0)
for i in range(1, n):
qc.cx(0, i)
qc.z(0)
return qc