Project Euler 255

プロジェクトオイラー
http://projecteuler.net/index.php?section=problems&id=255


この問題はやさしい。
例題をふつうに書くと、


def div_ceil(n, d):
return (n + d - 1) / d

def f(n, x):
return (x + div_ceil(n, x)) / 2

def count(n):
counter = 1
x0 = 200
while True:
x1 = f(n, x0)
if x1 == x0:
return counter
x0 = x1
counter += 1

print "%.10f" % (sum(map(count, xrange(10000, 100000))) / 9e4, )

14桁の場合は、これでは無理。
区間で考えて再帰で簡単に書ける。15分近くかかったけど。
最初、答えが合わなくてなんだろうと思ったら、単に打ち切る桁を間違えていただけだった。
19番目のようだ。