問題文
整数 n と オラクル O が入力として与えられる。
0 以上 2n 未満のある整数 L が存在し、オラクル O は 0≤x<2n と 0≤y<2 を満たす任意の整数の組 (x,y) に対して、次式を満たす。
∣x⟩n∣y⟩1O{∣x⟩n∣y⊕1⟩1∣x⟩n∣y⟩1(x=L)(x=L)
ただし、 ⊕ は排他的論理和を表す。
量子状態 ∣0⟩ から、測定時に 0.9 以上の確率で ∣L⟩n∣0⟩1 が観測されるような状態 ∣ψ⟩ を作り出す操作を n+1 量子ビットをもつ量子回路 qc 上に実装せよ。
より正確な問題文
量子状態 ∣0⟩n+1 に qc を作用させた後の状態 ∣ψ⟩ を、ai を計算基底状態 ∣i⟩n+1 の複素振幅として次式で定義する。
∣ψ⟩=i=0∑2n+1−1ai∣i⟩
このとき、次式の条件を満たすような qc を構築せよ。
∣aL∣2≥0.9
制約
- 2≤n≤10
- 量子回路の深さは 250 を超えてはならない。
- オラクル O は深さ 1 の量子回路として与えられる。
- 整数は リトルエンディアン にしたがってエンコードすること
- グローバル位相 は問わない。
- 提出されるコードは次のフォーマットにしたがうこと
from qiskit import QuantumCircuit, QuantumRegister
"""
You can apply oracle as follows:
qc.compose(o, inplace=True)
"""
def solve(n: int, o: QuantumCircuit) -> QuantumCircuit:
x, y = QuantumRegister(n), QuantumRegister(1)
qc = QuantumCircuit(x, y)
# Write your code here:
return qc