0

かわぐちさんの素因数発見アルゴリズムと、合成数の発見方法(素数は作れないが、間接的に作れる)

90
0

かわぐちさんの素因数発見アルゴリズム

n,m,N,k,al,bl,cl,,Xl,no,k,l,oN(Xは任意の記号)
素因数を求める数がm、初項はf(m)とする。
f(m)=an0(m+1)n0+an01(m+1)n01++a1(m+1)a0(a0=b0=c0=X0=ank1
Xは任意の記号でaから数えてk-1番目)

f(m+1)=bn1f(m)n1+bn11f(m)n11++b1f(m)b0
f(m+k)=Xnkf(m+k1)nk1+Xnk1f(m+k1)nk2++X1f(m+k1)X0
数列Xm,nkを総当りにする。
nkkは任意の0を含む自然数)は非常に大きな値にする。
素数の無限積の途中までの数をNとする。
mod Nでmをどんどん大きくし、f(m) mod Nを求める。
全ての項同士の差Zを求め、NとZのgcdを求めると、それがmの約数である。
Gk=f(x)f(y)x,yは自然数かつx>y,m1)とNのgcdを求める。


こうぼくん「……???」
かわぐちさん「分かんないね」
こうぼくん「うん」
(こうぼくんが困ってしまった)


たまねぎくん「解説してあげるよ」


たまねぎくんの解説

なんでこんな風に難しくなってしまったかというと、実際にこのアルゴリズムを用いる際に、可能な限り自由に計算ができるように、一般化し過ぎたからです。
要するに、素因数を求める数がx
xの倍数をPx,Qx,Rxとした時に
a(x+1)10a+1=Px+1
b(x+1)20b+1=Qx+1
c(Px+1)30c+1=Rx+1
という風になるので、
f(x)=Px+1
f2(x)=Qx+1
とした時に、
f2(x)f(x)=(QP)x
となり、xの倍数ができます。
全ての数の共通の素因数は、非常に高い確率でxの素因数です。



こうぼくん「なるほど」
かわぐちさん「分かった」
こうぼくん「よかった」


初学者の為の、mod Nでも計算できる理由
246374637(mod5000)
この余りの4637と5000の共通の素因数は、24637の素因数です。
760001000(mod5000)
10005000の共通の素因数は、76000の素因数です。
a=5000n+1000=1000(5n+1)
一般化すると、
a=Nn+r=r((N/r)n+1)
従って、N=235711の場合、Nが素数の積なので、Nの素因数の素数とrの共通の素因数は、aの素因数です。


追記 2024/1/8

ちょっと間違ってます。

素因数の積Pで割った時の循環小数の循環する桁を見て、素数P+1の積で割った時の循環小数の循環する時の桁の数より循環する桁の数が小さくなっていれば、どれかの素数で割り切れています。

それ以上の上手い方法はありませんし、剰余をもう一度式に代入はできません。


追記 2024/5/30

確率は低いですが、ダイアル数などの桁が大きい循環小数でない場合は、桁が急に短くなるので、計算結果を捨ててやり直します。
ムチャクチャなようで、確率の問題です。

合成数の発見方法

登場する数は全て非負整数。
まず
aN+b=(an)(N+m)
という式を作る。先にa, n, N, mを適当に決めて、bは後から決める。

(an)(N+m)=aN+amnNnm

b+nN=(an)m
左辺は2つの非負整数の積なので、合成数が無数に作れる。

投稿日:2023419
更新日:2024530
OptHub AI Competition

この記事を高評価した人

高評価したユーザはいません

この記事に送られたバッジ

バッジはありません。
バッチを贈って投稿者を応援しよう

バッチを贈ると投稿者に現金やAmazonのギフトカードが還元されます。

投稿者

のんびりしようね。

コメント

他の人のコメント

コメントはありません。
読み込み中...
読み込み中