Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
こ、これは (#1564513) | 素数の分布は「ベンフォードの法則」に従っている | スラド
この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。

素数の分布は「ベンフォードの法則」に従っている」記事へのコメント

  • by Anonymous Coward on 2009年05月13日 17時54分 (#1564513)
    これほどコンピュータ向きの題材は無いんでは?

    みんな、すぐに手元のコンピュータで確認してみるんだ

    エラトステネスの篩をアレンジしたプログラムなんかは簡単に作れるよね
    • by TarZ (28055) on 2009年05月13日 18時03分 (#1564517) 日記

      とりあえず、手計算で出来る範囲(10以下)で試してみたところ、1で始まる素数は1つもありませんでした。

      # 心が落ち着きました。

      親コメント
    • 試しにプログラムを書かれる方がいるかと思いますので参考まで

      以前エラトステネスのフルイのプログラムを色々書いてみた事ありますが、10^10とかのオーダーになると単純にプログラムすると、10Gバイトメモリが必要ですが、フルイを分割してプログラムした方がメモリ節約&キャッシュの効きがよくて速いですよ。

      フルイの分割というのは、フルイの対象とする範囲を、例えば

      2~10^8
      10^8~2*10^8
      2*10^8~3*10^8
        ....
      99*10^8~100*10^8

      とか分割します。分割したそれぞれに対してフルイを実行します。

      (分割の単位は例です。分割の単位はベンチ行って最適化してください。)

      途中の数からフルイを計算をはじめるためには、素数の表を持っておく必要があります。10^10までフルイを実行するには10^5までの素数表を持っておけばいいです。これはあらかじめ作る必要はなく、最初の2~10^8のフルイ実行時の結果を記憶しておけばいいです。

      というような工夫をすれば、AMD Opteron 1216で10^10までのフルイは3分7秒、10^11までは34分7秒で実行出来ました。

      なおメモリ節約のため上記のような分割ではなく、bit単位でのアクセス、2/3/5の倍数を例外扱いなどをしてメモリ節約される方もいるかもしれませんが、かなりペナルティが高いです。10^10までのフルイで24分57秒、10^11までのフルイで230分16秒という結果になりました。

      親コメント
    • by Anonymous Coward
      誰もやっていない様なので、簡単なのやってみた。

      100万は64ビットでも桁あふれしたので、10万まで。

      1 20.54%
      2 17.45%
      3 15.01%
      4 12.78%
      5 10.70%
      6 8.61%
      7 6.79%
      8 4.94%
      9 3.18%

      ちなみに、素数の出現率ではなく、素数の出現率の和です、念のため。
      • by Anonymous Coward
        × 出現率の和
        ○ 出現数の和の割合

        あと、9の割合って減って行く様な気がするが、
        桁を上げて行くと増えて行くんですよね。不思議。

人生unstable -- あるハッカー

処理中...