問題概略
3 個のさいころを投げる。
(1) 出た目の積が 6 となる確率を求めよ。
(2) 出た目の積が となる確率が であるような をすべて求めよ。
解説の pdf も作りました。きれいなレイアウトで読みたい方はこちらをどうぞ。
「目の集合→目の出方」の順に数える
すべてのサイコロを区別します。
目の出方は全部で 通で,これらは同様に確からしいです。
(1)について
積が 6 になる目の集合は , の 2 つ。
どのサイコロがどの目を出すかを考えると,目の出方は 通りです。求める確率は
(2)について
基本的には(1)と同様で,「目の集合→目の出方」の順に数えますが,最初は逆算が必要です。
より目の出方は 6 通り。
, , を相異なる数とします。目の集合は
, ,
の 3 パターンあって,それぞれ , 3, 1 通りの目の出方を与えます。
6 は や という分割もできますが,ある数が立方数 として 2 通り以上にあらわせることはないので,目の出方が 6 通りになるのは次のどちらかのときです。
- 型で 1 通りにあらわせる
- 型で 2 通りにあらわせる
{x, y, z} 型で 1 通りのとき
型は 通りしかありません。全部書いて のダブリをチェックします。
は条件をみたします。
{x, x, y} 型で 2 通りのとき
型は 通りあります。これも全部書いて のダブリをチェックします。
は 2 通りにあらわせますが,他はダメです。
以上まとめて
おまけ:プログラムを組んで計算
プログラミングありだったら(2)は楽勝ですね。
, , で 3 重にループさせて の登場回数を調べるだけです。
mathematica は関数型言語でループ処理は苦手なのですが,それでも 0.0006 秒でした。
In[]:= AbsoluteTiming[ a = ConstantArray[0, 6^3]; For[i = 1, i <= 6, i++, For[j = 1, j <= 6, j++, For[k = 1, k <= 6, k++, a[[i*j*k]]++]]]; ans = Last@Reap@Do[If[a[[i]] == 6, Sow@i], {i, 1, 6^3}]] Out[]= {0.0006358, {{4, 10, 15, 16, 40, 90, 120}}}
関数型言語らしく書くと 0.0002 秒で答えが出ます。
In[]:= AbsoluteTiming[ lst = Tuples[Range@6, 3]; ans = First /@ Select[Tally[Times @@ # & /@ lst], Last@# == 6 &]] Out[]= {0.0002293, {4, 10, 15, 16, 40, 90, 120}}