$$ \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 - Winter 2019 A2 - Generate equal superposition of four basis states◇◇


☆問題URL

https://codeforces.com/contest/1116/problem/A2

☆問題の概要

$N$桁の量子状態$\ket{0\dots0}$と4つの異なるbit列が与えられるので、$\ket{\psi_i}$が$i$番目のbit列であるような4状態の重ね合わせ $$\ket{S}=\frac{1}{2}\left( \ket{\psi_0}+\ket{\psi_1}+\ket{\psi_2}+\ket{\psi_3} \right)$$ を作成せよ。

☆解法

はじめに2桁の新しいqubitを用意して $$\ket{0\dots0}\otimes\ket{00}$$ とし、下2桁にアダマール・ゲートを作用させると $$\frac{1}{2}\ket{0\dots0}\otimes\left( \ket{0}+\ket{1}+\ket{2}+\ket{3} \right)$$ となります。

状態$\ket{0\dots0}$をあるbit列で表せる状態$\ket{\psi}$にするには、bit列がtrueである桁で$X$ゲートを利用してqubitを反転させますが、ControlledOnInt演算を用いると、これを下2桁が特定の状態の項に限って行うことができます。このようにして、追加qubitが$\ket{0}$のとき$\ket{\psi_0}$に、$\ket{1}$のとき$\ket{\psi_1}$に、というように状態を変化させれば、4状態の重ね合わせ $$\frac{1}{2}\left( \ket{\psi_0}\otimes\ket{0} +\ket{\psi_1}\otimes\ket{1} + \ket{\psi_2}\otimes\ket{2} + \ket{\psi_3}\otimes\ket{3} \right)$$ を作ることができます。

最後に、先ほどとは逆に、上$N$桁が$i$番目のbit列と一致している場合に下2桁を$\ket{0}$にする操作を行えば、望む状態 $$\frac{1}{2}\left( \ket{\psi_0} + \ket{\psi_1} + \ket{\psi_2} + \ket{\psi_3} \right)\otimes\ket{00}$$ を得ます。

これで、この問題が解けました。

☆ソースコード

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

    operation Solve (qs : Qubit[], bits : Bool[][]) : Unit {
        using(anc=Qubit[2]){
            ApplyToEach(H,anc);
            for(i in 0..3){ //ancがiのとき、qsをbits[i]に
                for(j in 0..Length(qs)-1){
                    if(bits[i][j]){
                        (ControlledOnInt(i,X))(anc,qs[j]);
                    }
                }
            }
            for(i in 0..3){ //qsがbits[i]のとき、ancを0に
                if(i%2==1){
                    (ControlledOnBitString(bits[i],X))(qs,anc[0]);
                }
                if(i/2==1){
                    (ControlledOnBitString(bits[i],X))(qs,anc[1]);
                }
            }
        }
    }
}
                
            

戻る