素数大富豪素数問題に挑む -7日目- 間違いを発見!
※この記事は、数字のド素人であるにせーが、素数大富豪素数問題に挑む記録です。
素数大富豪素数問題に挑む -予告- 素数大富豪とは? - にせいの日記
素数大富豪素数問題に挑む -1日目- まずはやってみる - にせいの日記
素数大富豪素数問題に挑む -まだ1日目- 場合分けとRuby導入 - にせいの日記
素数大富豪素数問題に挑む -まだまだ1日目- 場合分けという底なし沼 - にせいの日記
素数大富豪素数問題に挑む -2日目- 方針転換 - にせいの日記
素数大富豪素数問題に挑む -3日目- Ruby活用 - にせいの日記
素数大富豪素数問題に挑む -4日目- いけるところまでいく - にせいの日記
素数大富豪素数問題に挑む -5日目- コツコツ8桁 - にせいの日記
素数大富豪素数問題に挑む -6日目- 9桁その1 - にせいの日記
〜前回までの進捗〜
- 最大の数は72桁(実際に出せる数は71桁以下)
- 使うカードの枚数は考えず、できる素数の桁数で分けて考える
- 4桁以下の素数1,229個は全て表現可能
- 5桁の素数は、8,357個が表現可能
- 6桁の素数は、68,703個が表現可能
- 70桁くらいの素数判定は大変そうだ
- 7桁の素数は、581,128個が表現可能
- 8桁の素数は、4,976,857個が表現可能
- 9桁の素数は、5,198,166個以上が表現可能
以上
<7日目> 2015年1月13日(火)
さて残りの9桁を片付けるかーと考え始めたところでふと気付いた。
6桁からずっと使い回してきた「各桁で使われる数字の個数を数えて、トランプで表現できない素数をカウントする」プログラムであるが、それぞれの数字の個数の上限を、0は2個、2〜9の数字に関しては4個としてきた。
これは…間違いである。
なぜなら、ジョーカー2枚はどんな数字としても使うことができるからである。
ところが、現在のプログラムではジョーカーを0として使うことしか想定していない。
つまり、本当に素数大富豪で出すことのできる素数は、現在算出している数よりさらに多いと思われる。
…なんてことを言っていても仕方ないので早速修正を考える。
6桁まではそれを想定に入れて0の上限しか考えていないので、修正の必要があるのは7桁からだ。
以前の計算では「0が3個以上または2〜9のどれかが5個以上」使われていたら「トランプでは表現不可」と判断していた。
しかし正しくは、10以外の形で0が使われていない場合に限り、2〜9は6個まで使うことができる。
つまり、「10でない形の0の個数」と「2〜9のいずれかの個数」の和が7以上になった場合のみ、トランプで表現できないということになる。
これを組み込んだプログラムを回してみたところ、素数大富豪で出すことができない素数の個数は、
7桁では 4,953個 → 4,083個
8桁では 120,019個 → 66,932個
となった。
7桁では思ったより減らなかったのは、0の個数の制限の方が強く効いているということなのだろう。
一方で8桁では、作れない数が約半分になった。ジョーカーを使うということが、これだけの可能性を広げているということを改めて実感させられた。
586,081 - 4,083 = 581,998個
5,096,876 - 66,932 = 5,029,944個
となった。
ここまでのまとめ
…今後こそ本当だといいなぁ。