B2: Convert Bit-Flip into Phase-Flip I

実行時間制限:3 秒

メモリ制限:512 MiB

配点:200点

問題文

整数 nnオラクル OO が入力として与えられる。 オラクル OO0x<2n0\leq x\lt 2^n0y<20\leq y\lt 2 を満たす任意の整数の組 (x,y)(x,y) に対して、次式を満たす。

xny1Oxnyf(x)1\ket{x}_n \ket{y}_1 \xrightarrow{O} \ket{x}_n \ket{y \oplus f(x)}_1

ただし、\oplus は排他的論理和を表し、関数 f(x)f(x)00 以上 2n2^n 未満の整数 xx に対して、00 または 11 のどちらかを返す。

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

xn01qc{xn01(f(x)=1)xn01(f(x)=0)\begin{equation} \ket{x}_n\ket{0}_1 \xrightarrow{\mathrm{qc}} \begin{cases} - \ket{x}_n\ket{0}_1 & (f(x) = 1) \\ \ket{x}_n\ket{0}_1 & (f(x) = 0) \end{cases} \nonumber \end{equation}

を満たす操作を量子回路 qc\mathrm{qc} 上に実装せよ。

制約

  • 1n101\leq n\leq 10
  • 整数はリトルエンディアンにしたがってエンコードすること (例:100=1001\ket{100} = 1 \neq \ket{001})
  • グローバル位相 は問わない。
  • 提出されるコードは次のフォーマットにしたがうこと
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

入力例

  • n=2, (f(00),f(10),f(01),f(11))=(0,1,0,1)n = 2,\ (f(00), f(10), f(01), f(11)) = (0, 1, 0, 1): 実装された量子回路 qc\mathrm{qc} は次式を満たす。 14(00+10+01+11)0qc14(0010+0111)0\frac{1}{\sqrt{4}} ( \ket{00}+\ket{10}+\ket{01}+\ket{11} )\ket{0} \xrightarrow{\mathrm{qc}} \frac{1}{\sqrt{4}} (\ket{00} - \ket{10} + \ket{01} - \ket{11})\ket{0}

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