B3: Less Than Oracle I

実行時間制限:3 秒

メモリ制限:512 MiB

配点:300点

問題文

整数 n, Ln,\ L が入力として与えられる。

0, 1, ... L1\ket{0},\ \ket{1},\ ...\ \ket{L-1} の複素振幅 aia_i1-1 をかけるようなオラクル OOnn 量子ビットをもつ量子回路 qc\mathrm{qc} 上に実装せよ。

制約

  • 1n51 \leq n \leq 5
  • 1L2n1 \leq L \leq 2^n
  • グローバル位相 は問わない。
  • 整数はリトルエンディアンにしたがってエンコードすること (例:100=1001\ket{100} = 1 \neq \ket{001})
  • 提出されるコードは次のフォーマットにしたがうこと
from qiskit import QuantumCircuit
 
 
def solve(n: int, L: int) -> QuantumCircuit:
    qc = QuantumCircuit(n)
    # Write your code here:
 
    return qc

入力例

  • n=2, L=3n = 2,\ L=3: オラクル OO は次式の遷移を満たす。
14(00+10+01+11)O14(001001+11)\frac{1}{\sqrt{4}} (\ket{00} + \ket{10} + \ket{01} + \ket{11}) \xrightarrow{O} \frac{1}{\sqrt{4}} (-\ket{00} - \ket{10} - \ket{01} + \ket{11})

ヒント

開く
  • 次のようにして、何らかの量子ゲート GateGate の 複数制御ゲートを作用させることができます。
from qiskit.circuit.library import Gate
 
qc.append(Gate().control(n - 1), range(n))

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