【Python】ボツになった素因数分解アルゴリズム【数論】
と表される場合を考える。このから
を高速に求めたい。そこで、[text:sqrt{n}]と比べて大きすぎず小さ過ぎない適当な自然数
をとり、
とすると、
となる。ここで、整数平方根のプログラムを用いた。
これを用いて、を
と表すことにする。ここで、は
を満たす自然数である。
式変形して、
となる。ここで、が
に比べて十分小さいとすると*1、この式は次のように近似できるはずである。
これをについて解くと、
となる。なので、更に変形して、
となる。cをこの範囲でループさせて、が
を割り切るか調べれば良い。
aの数の候補は、トーシェント関数となるので、このアルゴリズムの計算量は、
となる。mを2から始まる素数の連続した積にとることで、この計算量を短縮できる。このときの計算量は
となる。
しかし、これだけ短縮してもrsa100は残念ながら分解できなかった。こんなアイデアではダメなんだろう。もっと革新的なアイデアが必要なはずだ。
*1:これは、2つの素因数が近すぎないことを意味する。このとき、
である。