Ex: Can you prepare ω?\ket{\omega}?

実行時間制限:3 秒

メモリ制限:512 MiB

配点:600点

問題文

整数 nn と 実数 PP、中身のわからない nn ビット量子ゲート UUnn ビットパラメトリック量子ゲート R()R(\cdot) が入力として与えられる。

あるベクトル ω\ket{\omega} が存在して、次の2つが成り立つことがわかっている。

  • PωU024PP \leq \left|\braket{\omega \mid U \mid 0}\right|^2 \leq 4P
  • R(θ)=I(1eiθ)ωωR(\theta) = I - (1 - e^{i\theta})\ket{\omega}\bra{\omega}

量子ゲート UUR()R(\cdot) を用いて、量子状態 ω\ket{\omega} を作り出す操作 OOnn 量子ビットをもつ量子回路 qc\mathrm{qc} 上に実装せよ。

ただし、許容誤差を 0.010.01 とし、操作 OOωO020.99\left|\braket{\omega \mid O \mid 0}\right|^2 \geq 0.99 を満たさなければならない。

制約

  • 1n51 \leq n \leq 5
  • 0.02P10.02 \leq P \leq 1
  • R()R(\cdot) の作用回数は 100100 を超えてはならない。(超えた場合には DLE (depth limit exceeded) エラーを表示する)
  • グローバル位相 の変化は問わない。
  • 提出されるコードは次のフォーマットにしたがうこと
from qiskit import QuantumCircuit
 
"""
You can apply U and R as follows:
qc.compose(U(), inplace=True)
qc.compose(R(theta), inplace=True)
"""
 
 
def solve(n: int, P: float, U, R) -> QuantumCircuit:
    qc = QuantumCircuit(n)
    # Write your code here:
 
    return qc

ヒント

開く
  • 量子ゲート UUR()R(\cdot) の逆ゲートを利用することも可能です。
qc.compose(U().inverse(), inplace=True)
qc.compose(R(theta).inverse(), inplace=True)

解答を提出するにはログインしてください。