RPGツクールと数学のブログ

RPGツクールと数学についてのブログです。

n番目の素数を表す式

過去ブログの転載です。

素数の並びは今でも謎ですけど、n番目の素数を一本の式で表すこと自体は出来ちゃうんです。

 \displaystyle {\rm P}(n)=1+\sum_{m=1}^{2^{n}}\left\lfloor\sqrt[n]{\frac{n}{\sum_{k=1}^{m}\left\lfloor\cos^{2} \frac{(k-1)!+1}{k} \pi\right\rfloor}}\right\rfloor

 {\rm P}(n)はn番目の素数を表します。とっても複雑なのでカッコイイ感じがしますけど、非常にアルゴリズム的な数式で、まったく実用的な式ではありません。表せるというだけです。

3番目の素数を求めてみる

試しに {\rm P}(3)を計算してみましょう。3番目の素数ということなので、5になるはずです。

f:id:fermiumbay13:20190323071156p:plain
 n=3を代入して計算します。ややこしくなるため、各々四角で囲んで①、②としておきます。

①の計算です。 m=1から始めますので、 k=1の代入のみとなります。[ ]の上半分が切れたような記号は床関数といって、中の数が正なら小数点以下切り捨てを意味します。

コサイン二乗の中は分数式です。 k=1を代入すると、 \cos^{2}\frac{(1-1)!+1}{1} \pi = \cos^{2} 2 \pi=1となります。

次に②の計算をします。 \frac{3}{1}=3、3の3乗根は1.44……といった無限小数です。それの更に切り捨てなので、②の中身は1になります。

 m=1のとき②の中身は1でした。
 m=2のとき、 m=3のとき、……も順々やっていきます。

 m=2のときは①は 1+1=2となり、②は \left\lfloor \sqrt[3]{\frac{3}{2}} \right\rfloor = 1になります。

 m=3のときは①は 1+1+1=3となり、②は \left\lfloor \sqrt[3]{\frac{3}{3}} \right\rfloor = 1になります。

 m=4のときは①は 1+1+1+0=3となり、②は \left\lfloor \sqrt[3]{\frac{3}{3}} \right\rfloor = 1になります。

 m=5のときは①は 1+1+1+0+1=4となり、②は \left\lfloor \sqrt[3]{\frac{3}{4}} \right\rfloor = 0になります。

 m=6のときは①は 1+1+1+0+1+0=4となり、②は \left\lfloor \sqrt[3]{\frac{3}{4}} \right\rfloor = 0になります。

 m=7のときは①は 1+1+1+0+1+0+1=5となり、②は \left\lfloor \sqrt[3]{\frac{3}{5}} \right\rfloor = 0になります。

 m=8のときは①は 1+1+1+0+1+0+1+0=5となり、②は \left\lfloor \sqrt[3]{\frac{3}{5}} \right\rfloor = 0になります。

 m=1の値から m=8の値まで全部足して、 1+1+1+1+0+0+0+0=4になり、最後に先頭に 1があるので、 1+4=5、よって {\rm P}(3)=5と求まりました。3番目の素数は5ということですね!あってます。

しかしこの式で例えば100番目の素数とか計算しようと思うと、100近い数の階乗が出てきたり、そもそもΣの上限が 2^{100}とかなってとてもじゃないけど現実的に計算できなくなります。理論上は有限時間で計算可能で、 {\rm P}(100)=541と求まるはずなんですけど……

n番目の素数が得られる仕組み

何でこの式で素数が求められるのか、仕組みを説明していきます。

↑式中の①の kに関するΣの中には、切り捨て記号の中にコサイン2乗の式が入っていました。この部分では、素数の判定を行っています。この部分が肝ですね。

 n素数のとき (n-1)! \equiv -1 (\mod n) が成り立つという定理(ウィルソンの定理)があります。つまり、 (n-1)!+1 nで割り切れたら素数、ということになります。割り切れる⇔整数になる、ということなので、次は \cosを使って整数か非整数かを判定します。 \cos(整数 \pi)=\pm 1ですので、さらにこれを2乗すれば、整数なら1、非整数なら1未満、として振り分けができます。ということは、小数点以下切り捨てた結果が1なら整数(素数だった)、0なら非整数(素数じゃなかった)、と判定できることになります。

これにより、 \displaystyle \left\lfloor\cos^{2} \frac{(n-1)!+1}{n} \pi\right\rfloorというのは、n素数なら1、非整数だったら0と判定する式となります。( n=1だと1)

①の計算では k=1から mまで足しているので、1は素数と認めないとすると、( mまでの素数の個数)+1の値が得られることになります。 m=5だったら2, 3, 5が素数だから、4になりますね。

①の計算により、 mまでの素数の個数は取得できるようにはなりましたけど、やりたいのは n番目の素数が何かを求めることですので、欲しかった順番の素数が出てきたら計算終了としたいわけです。

例えば3番目の素数が出て来たとき、①の計算結果は4になっており、3を超えます。一方で \frac{3}{4}を計算すると1未満の数になります。1未満の数の3乗根はやはり1未満ですので、これを切り捨てれば0にすることができます。

これを利用したのが②の部分の計算です。①の計算結果が4以上だと分母が大きくなるので0とし、3以下だと1以上の数になります。1以上といっても判定だけしたいので2とかになってもらっては困るから、 n乗根が間に入ってます。 mの範囲を 2^{n}までと制限しておけば、 n \ge 1のとき 1 \le \sqrt[n]{n} \lt 2になるので、これを切り捨てて1とすることで判定しているのです。

従って②の中身の計算結果は必ず1か0になるのですね。 m番目の数が n番目の素数以上であれば0、未満であれば1になるので、未満の間だけひたすら1を足していき、0になり始めたらもう足すのをやめる、とすればよく、それ以降は何も足されなくなります。

プログラム的には0になった時点で処理を中断させればいいのですけど、数式ではそう記述できないので、 2^{n}まで足すという式になっています。

このままだと丁度3番目に現れた素数の分が足されないので、最後に1を足している、というわけです。これがこの式でn番目の素数が求められるという仕組みです。

もちろん表せてるだけで実用性はないのですが、一本の式で表せるというのが、何だか素数の謎が解明された感があってよくないですかね^^;(謎はまだまだ解明されない)

この式を使わずとも、現実的な時間で巨大な素数を瞬時に取得できてしまえるような時代が来たら、それこそ新しい数学でしょうね。