Home English

Kuina-chan

くいなちゃんOct 17, 2017


1~6の目が出るサイコロを使って、1~10の乱数を作ることはできますでしょうか!

[問題] 等しい確率で1~6の目が出る一般的なサイコロを使って、1~10の乱数を作りなさい。
1~10の乱数が欲しいことは多々ありますので、挑戦してみましょう。

写像

まず、サイコロ1つを1回だけ振って、1~10の乱数が作れるかどうかを考えてみます。
これは、1~6の入力を1~10の乱数に対応付ける「写像」と考えると、後者の個数のほうが多くなり全射になりませんので、不可能であることが分かります(サイコロを1回振って1~10の乱数を作る)。
サイコロを1回振って1~10の乱数を作る
サイコロを1回振って1~10の乱数を作る
従って、サイコロを2つ以上使うか、2回以上振る必要があります。
では、サイコロを2つ以上、もしくは2回以上振って、ちょうど1~10の乱数に均等に対応させることはできるでしょうか。
サイコロをn回振ったとき、出る目のパターンは「6のn乗」通りになります。 しかし、6を何乗しても一の位は6のままですので、1~10に対応させようとすると常に6余ります。 これらを1~10の乱数に均等に対応させることは不可能です(サイコロをn回振って1~10の乱数を作る)。
サイコロをn回振って1~10の乱数を作る
サイコロをn回振って1~10の乱数を作る
一つの対処策としては、余った6つが出たときに「サイコロをもう一度振る」ことが考えられます。 例えばサイコロを2回振り、1回目に6が出たらもう一度振り直すとします。 このときサイコロを2回振って1~10の乱数を作るのように、「2回目に出た目は奇数なら0で偶数なら5」と定め、1回目に出た目と足し合わせると、1~10の乱数になります。
サイコロを2回振って1~10の乱数を作る
サイコロを2回振って1~10の乱数を作る
このように余った6つをもう一度振り直すことで、1~10の乱数が作れます。 ただしこの場合、6/36の確率でサイコロを振り直さなければならないので、運が悪ければ無限にサイコロを振る羽目になります。

無限級数の和

「無限級数の和」を用いる方法も考えられます。 目の合計が9以外になるまでサイコロを2個ずつ振り続け、9以外が出たときにサイコロを振っていた回数が偶数である確率は、なんと1/10となります(無限級数の和で1/10を作る)。
無限級数の和で1/10を作る
無限級数の和で1/10を作る
ただこの方法で1/10の確率を作り出すことはできますが、このままでは1~10の乱数にはなりません。 そこで1/10が出なければ同様に、1/9、1/8、1/7、…の確率を作り出すことで、結果的に1~10の乱数を等しい確率で生成することができます(無限級数の和で1~10を作る)。
無限級数の和で1~10を作る
無限級数の和で1~10を作る
しかし煩雑な上、振り直す回数も多くなるので、この方法はあまり有用ではなさそうです。

サイコロを合体させる

複数のサイコロを接着剤で接合させることで、物理的に1~10が作れないかを考えてみました。
が、思いつきませんでした(接合したサイコロで1~10を作る(失敗))。
接合したサイコロで1~10を作る(失敗)
接合したサイコロで1~10を作る(失敗)

結論

結局、これが一番良さそうです(サイコロで1~10を作る)。
サイコロで1~10を作る
サイコロで1~10を作る
1508204884ja