モンテカルロ法によるオイラー定数数値計算のお遊び

 オイラー定数をDirichletの約数定理によりモンテカルロ法的に試算しようというアイデアを生煮えでまとめておきます。

『2017-01-22 Dirichletの約数定理のひとつ』で報告したように

u>0 v>0 u*v<=xを満たす格子点の数Nの大きさはオイラーの定数γとすれば、その大きさの見積もりは下式となる。

 N(x)〜 x log x + (2γ-1)x

とするならば、ある限定された区域内で乱数を発生させて、γを近似計算できる可能性がありますね。

 具体的にはこうなります。

x>=u>0 及び x>= v>0 でu,vの自然数ペアをランダムに生成させます。
その上で u*v <=xを満たす格子点の数Nをカウントするのです。

 γ〜(N/x - Log(x))/2
から、オイラー定数を算出します。

 試算してみました。

 x=1000では乱数ペアを1000000個生成させて、 u*v <=1000を満たす格子点数をカウントすると7186となります。
            γ〜0.639122

 x=2000では乱数ペアを4000000個生成させて、 u*v <=2000を満たす格子点数をカウントすると15626となります。
           γ〜0.606049

 x=3000では乱数ペアを9000000個生成させて、 u*v <=3000を満たす格子点数をカウントすると24473となります。
           γ〜0.57565

 x=4000では乱数ペアを16000000個生成させて、 u*v <=3000を満たす格子点数をカウントすると33876となります。
           γ〜0.587475180

 だんだんとオイラー定数の正確な値(0.5772156649...)に近づくのがわかりますね。
 モンテカルロ法で数学定数というと円周率しかない感じなので、一服の清涼剤にはなりましょう。

お気づきだと思いますが、乱数ペアはx^2個生成させているので、計算量でのメリットはまったくありません。いろいろサンプル数を変動させたのですが、少ないと精度がボロボロになるようです。
 
 そこで、経験者に教えてほしいのですが、もっとうまいやり方があるでしょうか?
 なぜ、x^2個なのでしょうか?


モンテカルロ法入門

モンテカルロ法入門