ScalaでProject Euler(90)

Problem 58

解を概算してみましょう。
素数定理が使えそうです。素数定理素数の密度がだいたいわかります。x付近で整数log x個に平均約1個素数があります。例えば、10000の前後だとlog10000 ≒ 9.2個に1個、1億だと18.4個に1個素数があることになります。
さて、スパイラルの対角線上も同じような素数の密度だと仮定します。しかし、対角線上は奇数ばかりなので密度は半分と考えるのがよさそうです。そのほかにも考慮すべきこともあるのですが、そこらへんはばっさり考えから落とします。辺の長さをEとすると、密度はlogE2 / 2です。これが10になるので、

logE = 10
E = e10 ≒ 22026

これが解の概算です。割とあってますね。この問題は実際にはその瞬間ではなく積算なので10%を切るのはこれより少しあとになります。次に9%なら、

E = e100/9 ≒ 66911

8%なら、

E = e100/8 ≒ 268337

こんな感じに急速に増えていきます。