$$ \def\bra#1{\mathinner{\left\langle{#1}\right|}} \def\ket#1{\mathinner{\left|{#1}\right\rangle}} \def\braket#1#2{\mathinner{\left\langle{#1}\middle|#2\right\rangle}} $$

◇◇Microsoft Q# Coding Contest - Summer 2018 - Warmup H- Oracle for f(x) = parity of the number of 1s in x◇◇


☆問題URL

https://codeforces.com/contest/1001/problem/H

☆問題の概要

$N$桁の量子状態$\ket{x}$とqubit$y$が与えられる。$\ket{y}$をオラクルqubitとして$f(x)=\sum_i x_i\;mod\;2$で定義されるオラクルを作成せよ。

☆解法

$N$桁のqubitで表される量子状態$\ket{x}$が奇数個の$\ket{1}$を含むとき$f(x)=1$、そうでないとき$f(x)=0$となる関数$f(x)$で定義されるオラクルを実装せよという問題です。

これを実現するには、$\ket{x}$の各qubitを制御bitに、$\ket{y}$をターゲットbitにして順番に$N$個のC-NOTゲートを作用させればよいです。

☆ソースコード

                
namespace Solution {
    open Microsoft.Quantum.Primitive;
    open Microsoft.Quantum.Canon;

    operation Solve (x : Qubit[], y : Qubit) : ()
    {
        body
        {
            for(i in 0..Length(x)-1){
                CNOT(x[i],y);
            }
        }
    }
}
                
            

戻る