計算は速いが、iが9で合わなくなった。
Math.sqrtの計算の精度の問題だろう。
def f(r)
q = r * r
m = (Math.sqrt(2) * r / 2).to_i
# 正方形の内部またはx軸,y軸上の格子点
s = (2 * m + 1) * (2 * m + 1) + (r - m) * 4
# 上記以外
(m + 1..r).each{|x| s += 8 * Math.sqrt(q - x * x).to_i}
s
end
# f(10 ** 9)の計算結果は間違い
(0..9).each{|i| p f(10 ** i)}
5
317
31417
3141549
314159053
31415925457
3141592649625
314159265350589
31415926535867961
3141592653589765277
0 件のコメント:
コメントを投稿
注: コメントを投稿できるのは、このブログのメンバーだけです。