PEをMathematicaで

Project Eulerに挑戦してみよう

Project Euler 285 / ピタゴラス・オッズ

Albert は正整数 k を選び,さらに二つの実数 a, b を区間 [0,1] の一様分布からランダムに選ぶ。さらに和 (ka+1)^2+(kb+1)^2 の平方根を計算し,最も近い整数に丸める。結果が k に等しければ,彼は k 点を得る。それ以外は 0 点である。

k=6, a=0.2, b=0.85 ならば

 (ka+1)^2+(kb+1)^2=42.05

42.05 の平方根は 6.484... で, 最も近い整数は 6 になる。この値は k=6 に等しいため, 彼は 6 点を得る。

k=1, k=2, ..., k=10 で 10 回プレイした場合,小数第6位で四捨五入した合計点の期待値は 10.20914 である。

k=1, k=2, k=3, ..., k=10^5 で 10^5 回プレイした場合,小数第6位で四捨五入した合計点の期待値はいくらか?

Problem 285 - Project Euler

確率=面積比

k 点を得る条件は

 \left(k-\dfrac{1}{2}\right)^2 \leqq (ka+1)^2+(kb+1)^2 <\left(k+\dfrac{1}{2}\right)^2

 x=ka+1,\, y=kb+1 とおきます。

 D_1:\left(k-\dfrac{1}{2}\right)^2 \leqq x^2+y^2 <\left(k+\dfrac{1}{2}\right)^2

点 (x, y) は領域  D_2:[1,\, k+1]\times [1,\, k+1] に一様に分布するので,k 点を得る確率は  D_2 D_1 \cap D_2 の面積比です。

 D_2 の面積は k^2 です。 D_1 \cap D_2 の面積を S(k) とすると,得点の期待値 E は次のように表されます。

 E=\sum \dfrac{S(k)}{k^2}\cdot k=\sum \dfrac{S(k)}{k}

数値積分で S(k) を求めて,その和をとりました。1分半かかりました。

数値積分→普通の積分

Mathematica は単に Integrate するだけで S(k) の具体形を求められます。これを使うほうが速く,無事1分におさまりました。