2024年07月27日くいなちゃん
1~6の目が出るサイコロを使って、1~10の乱数を作ることはできますでしょうか?
問題
等しい確率で1~6の目が出る一般的なサイコロを使って、1~10の乱数を作りなさい。
1~10の乱数が欲しいことは多々ありますので、挑戦してみましょう!
1写像
まず、サイコロ1つを1回だけ振って、1~10の乱数が作れるかを考えてみます。 これは1~6の目を1~10の乱数に対応付けることになるため、目のパターンが足りず不可能であることが分かります(図1-1)。
![サイコロを1回振って1~10の乱数を作る](/images/notebook/page3/throw_dice_once_for_random_1_to_10.png)
従って、サイコロを2つ以上使うか、2回以上振る必要があります。
では、サイコロを2つ以上、もしくは2回以上振って、ちょうど1~10の乱数に均等に対応させることはできるでしょうか。 サイコロを
回振ったとき、出る目のパターンは![](/s/6.png)
通りになります。 しかし、6を何乗しても一の位は6のままですので、1~10に対応させようとすると常に6余ります(図1-2)。
![](/s/n.png)
![](/s/6.png)
![](/s/sup_n.png)
![サイコロをn回振って1~10の乱数を作る](/images/notebook/page3/throw_dice_n_times_for_random_1_to_10_ja.png)
よって、これらのパターンを1~10の乱数に均等に対応させることは不可能です。
一つの対処策としては、余った6パターンが出たときにサイコロをもう一度振ることが考えられます。 例えばサイコロを2回振り、1回目に6が出たらもう一度振り直すとします。 このとき図1-3のようなパターンで割り振ると、1~10の乱数になります。
![サイコロを2回振って1~10の乱数を作る](/images/notebook/page3/throw_dice_twice_for_random_1_to_10_ja.png)
このように余った6パターンをもう一度振り直すことで、1~10の乱数が作れます。 ただしこの場合、6/36の確率でサイコロを振り直さなければならないので、運が悪ければ無限にサイコロを振る羽目になります。
2無限級数の和
別の方法として無限級数の和を用いる方法も考えられます。 目の合計が9以外になるまで2個のサイコロを振り続けると、サイコロを振った回数が偶数になる確率は、なんと1/10となります(図2-1)。
![無限級数の和で1/10を作る](/images/notebook/page3/make_a_tenth_with_sum_of_infinite_series_ja.png)
ただこの方法で1/10の確率を作り出すことはできますが、このままでは1~10の乱数にはなりません。 そこで1/10が出なければ同様に、1/9、1/8、1/7、…の確率を作り出すことで、結果的に1~10の乱数を等しい確率で生成することができます(図2-2)。
![無限級数の和で1~10を作る](/images/notebook/page3/make_1_to_10_with_sum_of_infinite_series.png)
しかし明らかに煩雑な上、振り直す回数も多くなるので、この方法は有用ではなさそうです。
3サイコロを合体させる
複数のサイコロを接着剤で接合させることで、物理的に1~10が作れないかを考えてみました。
が、思いつきませんでした(図3-1)。
![接合したサイコロで1~10を作る(失敗)](/images/notebook/page3/make_1_to_10_with_joined_dice.png)
4結論
結局、これが一番良さそうです(図4-1)。
![サイコロで1~10を作る](/images/notebook/page3/make_1_to_10_with_dice.png)