d0tfi1e’s blog

趣味と日記

Shorの素因数分解アルゴリズム

いくつか文献を見ましたが、多分初見で一番わかりやすいのはこれです。

流れを説明すると

  1. Hadamardゲートでレジスタ1について座標変換し $$ | 0\rangle + | 1\rangle + \cdots + | n - 1\rangle $$ という正規直交基底を作り出します。

  2. Unitaryゲートで $$ | 0 \rangle | a^{0} \,\mathrm{mod}\, N \rangle + | 1 \rangle | a^{1} \,\mathrm{mod}\, N \rangle + \cdots + | n - 1 \rangle | a^{n-1} \,\mathrm{mod}\, N \rangle $$ というレジスタ1とレジスタ2の合成状態を作り出します。

  3. 2の状態で、レジスタ2の状態は | a^{k} \,\mathrm{mod}\, N \rangleで、これは数通りしかありません。この状態で2を観測することによって状態を固定したとすると、状態1は収縮し、 rを位数として | a + nr \rangleの形のものの重ね合わせに制約されます。しかし、状態1を観測するのは1回しかできないので、なんとかして1度の観測で rを知る必要があります。

  4. そこで量子フーリエ逆変換が登場します。これを行うことで、 rを一発の測定で得ることが可能になります。 量子フーリエ変換後のレジスタの状態は $$\frac{1}{N} \sum_{j = 0}^{n - 1}\sum_{k = 0}^{n - 1} \exp(2\pi ijk/n) | k \rangle | a^j \,\mathrm{mod}\, N\rangle$$ となっています。この状態でレジスタ1を観測するわけですが、本来観測結果は n通りあります。しかし、いま k = k_0が観測されたとして、 その確率を考えてみると、そのときのレジスタ2の値(観測していないが収縮しているはず)を a^{j_0} \,\mathrm{mod}\, Nとすると $$\Biggl|\frac{1}{N} \sum_{j: x^j \equiv x^{j_0}} \exp(2\pi ijk_0/n) \Biggr|^2$$ となります。 和の条件を満たす j j = j_0 + mrのようにかけるので、これをもとに式を整理すると(省略しますが、誤差が O(1/N)積分に帰着します。完璧な導出は元論文にあります)、 |rk_0 \,\mathrm{mod}\, N| \le \frac{r}{2}を満たすとき、この値が大きくなり、観測されやすいことがわかります。 さて、実はこれを満たす rは1つに絞られます。具体的な操作としては、この不等式を変形すると整数 dを用いて $$-\frac{r}{2} \le rk_0 - dN \le \frac{r}{2}$$ つまり $$\Bigl|\frac{k_0}{N} - \frac{d}{r}\Bigr| \le \frac{1}{2N}$$ なので、 \frac{k_0}{N}を連分数分解することにより rが求められます。