問題文
整数 n と オラクル O が入力として与えられる。
オラクル O は 0≤x<2n と 0≤y<2 を満たす任意の整数の組 (x,y) に対して、次式を満たす。
∣x⟩n∣y⟩1O∣x⟩n∣y⊕f(x)⟩1
ただし、⊕ は排他的論理和を表し、関数 f(x) は 0 以上 2n 未満の整数 x に対して、0 または 1 のどちらかを返す。
0≤x<2n を満たす任意の整数 x に対して
∣x⟩n∣0⟩1qc{−∣x⟩n∣0⟩1∣x⟩n∣0⟩1(f(x)=1)(f(x)=0)
を満たす操作を量子回路 qc 上に実装せよ。
制約
- 1≤n≤10
- 整数は リトルエンディアン にしたがってエンコードすること
- グローバル位相 は問わない。
- 提出されるコードは次のフォーマットにしたがうこと
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):
実装された量子回路 qc は次式を満たす。
41(∣00⟩+∣10⟩+∣01⟩+∣11⟩)∣0⟩qc41(∣00⟩−∣10⟩+∣01⟩−∣11⟩)∣0⟩