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