Processing math: 0%
\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}とqubityが与えられる。\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);
            }
        }
    }
}
                
            

戻る