素数大富豪素数問題に挑む -3日目- Ruby活用
※この記事は、数字のド素人であるにせーが、素数大富豪素数問題に挑む記録です。
〜前回までの進捗〜
以上
<3日目> 2014年12月29日(月)
しばらく寝かせていたら、あっという間に年末。
「素数大富豪素数問題」提唱者(?)の@tsujimotterさんとお酒を飲みつつ、次のステップについて相談させてもらった。
2日目までで、5桁までの素数に関しては答えが得られたので、6桁についても同じ調子で調べることができる。
またここで、@tsujimotterさんに新しい技を教えてもらった。Rubyの素数判定コードである。
require 'prime'
Prime.prime? a
これだけでaの素数判定ができてしまうそうな。。便利!
これを活用して、ざっくり言うと下記のような内容のプログラムを書いた。
結果、上記条件に該当する数は203個存在することがわかった。
これを6桁の素数の数(68,906個)から差し引いて、6桁で表現可能な素数は68,703個ということになった。
それからこれは余談だが、議論をしながらRubyのコードを打っていて、インデントのスペースの数のことで@tsujimotterさんとケンカした。
たまーにしかプログラムをいじらない人間からしたらどうでもよいことに見えるのだが、大事なことらしい。一応覚えておこうと思う…。
さて7桁より先については、いよいよ0以外の数字が重複して出てくる可能性を排除しなければいけなくなってくるが、基本的には今回使ったものを応用していけばある程度まではいけるだろうと思われる。
ただ、ほぼ全てのカードを使用した場合の約70桁という数字は、さすがに素数判定をすることが困難らしい。
「この問題を全部解くのは無理じゃないかなぁ」と発案者に言われたところで、3日目は終了となった。
ここまでのまとめ
「最後まで行けない」とわかってしまい一気にやる気が失われた感があるので、この先に進むのがいつになるかはわからない。
ただ、6桁までで計78,289個の素数が表現できることがわかった時点で、「素数大富豪で使えそうな素数を全部覚えよう」という想いは打ち砕かれたので、ひとまず十分と言えるかもしれない。