B6: Quantum Arithmetic II

実行時間制限:3 秒

メモリ制限:512 MiB

配点:200点

問題文

整数 n, m, S0, S1, , Sn1n,\ m,\ S_0,\ S_1,\ \cdots,\ S_{n-1} が入力として与えられる。

00 以上 2n2^n 未満の整数 x=x0+21x1+2n1xn1x = x_0 + 2^1 x_1 + \cdots 2^{n-1}x_{n-1} (xi{0,1})\left(x_i \in \{0, 1\}\right) に対して、関数 f(x)f(x) を次式で定義する。

f(x)=S0x0+S1x1++Sn1xn1\begin{equation} f(x) = S_0 x_0 + S_1 x_1 + \cdots + S_{n-1}x_{n-1} \nonumber \end{equation}

0x<2n0 \leq x < 2^n を満たす任意の整数 xx に対して

xn0mOxnf(x) mod 2mm\begin{equation} \ket{x}_{n}\ket{0}_{m} \xrightarrow{O} \ket{x}_{n}\ket{f(x)\ \mathrm{mod}\ 2^m}_{m} \nonumber \end{equation}

を満たす n+mn+m 量子ビットオラクル OO を実装せよ。

制約

  • 1n,m91 \leq n, m \leq 9
  • n+m10n + m \leq 10
  • 0Sk<2m0 \leq S_k < 2^m
  • 量子回路の 深さ5050 を超えてはならない。
  • 整数は リトルエンディアン にしたがってエンコードすること (例:100=1001\ket{100} = 1 \neq \ket{001})
  • グローバル位相 の変化は問わない。
  • 提出されるコードは次のフォーマットにしたがうこと
from qiskit import QuantumCircuit, QuantumRegister
 
 
def solve(n: int, m: int, S: list[int]) -> QuantumCircuit:
    x, y = QuantumRegister(n), QuantumRegister(m)
    qc = QuantumCircuit(x, y)
    # Write your code here:
 
    return qc

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