2016年9月19日月曜日

素数番目が素数である数の列を調べた

 Mathematica4をインストールして正しく動作しているかどうか遊んでいたら、
約2年半前に遊びながら調べたことを思い出した。

 こんな数列である。
    1番目の素数は      2、
    2番目の素数は      5、
    5番目の素数は    11、
  11番目の素数は    31、
  31番目の素数は  127、
127番目の素数は  709、
709番目の素数は5381、
・・・

このようにして得られる数を並べると、次のようになる。

1, 2, 5, 11, 31, 127, 709, 5381, 52711, 648391, 9737333, 174440041,・・・

おもしろそうだ。


 調べるとこんな論文集があった。




この中にいくつかの数式処理プログラムでこの数列を得るための式があげられている。
MATHEMATICAのところには、こんな短いコマンドがある。

NestList[Prime@# &,1,16]

短いと入力が楽ちんだ♪

 Ver4で実行してみた。
10分近くかかった。

うーん、すごっ!
だってこんなに短いコマンドでこの数列を導いてしまうなんてすごすぎる。
こういったコマンドを実装しているから当たり前といえば当たり前なんだけど、
素数に挑む執念、MATHEMATICA恐るべし。
Ver8でも実行してみた。さすが何倍も速かった。

気になって時間を測った。
MacBookPro2007_bootcamp_Windows10_Ver4 : 594.66 sec
                      MacBookPro2011_Yosemite_Ver8 :   47.58 sec

 では、NestList[Prime@# &,1,16] をちょっと細かく説明しよう。



Prime[ ]関数をネスティングさせてそれをリスト形式で表せ、という意味だが、
一番わかりやすく表すと次のような、ながーい計算内容を一行で表していることになる。




ちょっと長すぎた。
第14項目(Out[20])まではほんの一瞬で計算がすむ。
第15項目で1秒かかるかどうかぐらい。
第16項目で数秒、
最後の第17項目で10分弱、
2428095424619番目の素数を求めるのにほとんどの時間を使っていたということになる。
第18項目以降は気の遠くなるような時間がかかるのだろうね。ふぅー。

 話は、がらっと代わって円周率は求める桁数が多くなれば0から9までの数の出現率は
同じになってゆくけど、
素数ではどうなんだろう?
 
 2016年春に一の位の出現率に偏りがあるっていう論文が発表されているけど、
どうなんだろうねぇ。
やっぱ、素数はおもしろいな。



0 件のコメント:

コメントを投稿