かわぐちさんの素因数発見アルゴリズム
素因数を求める数が
Xは任意の記号でaから数えてk-1番目)
数列
素数の無限積の途中までの数をNとする。
mod Nでmをどんどん大きくし、f(m) mod Nを求める。
全ての項同士の差Zを求め、NとZのgcdを求めると、それがmの約数である。
こうぼくん「……???」
かわぐちさん「分かんないね」
こうぼくん「うん」
(こうぼくんが困ってしまった)
たまねぎくん「解説してあげるよ」
たまねぎくんの解説
なんでこんな風に難しくなってしまったかというと、実際にこのアルゴリズムを用いる際に、可能な限り自由に計算ができるように、一般化し過ぎたからです。
要するに、素因数を求める数が
という風になるので、
とした時に、
となり、xの倍数ができます。
全ての数の共通の素因数は、非常に高い確率でxの素因数です。
■
こうぼくん「なるほど」
かわぐちさん「分かった」
こうぼくん「よかった」
初学者の為の、mod Nでも計算できる理由
この余りの4637と5000の共通の素因数は、24637の素因数です。
一般化すると、
従って、
追記 2024/1/8
ちょっと間違ってます。
素因数の積
それ以上の上手い方法はありませんし、剰余をもう一度式に代入はできません。
追記 2024/5/30
確率は低いですが、ダイアル数などの桁が大きい循環小数でない場合は、桁が急に短くなるので、計算結果を捨ててやり直します。
ムチャクチャなようで、確率の問題です。
合成数の発見方法
登場する数は全て非負整数。
まず
という式を作る。先にa, n, N, mを適当に決めて、bは後から決める。
∴
左辺は2つの非負整数の積なので、合成数が無数に作れる。