Project Euler Problem 025

http://projecteuler.net/index.php?section=problems&id=25
http://odz.sakura.ne.jp/projecteuler/index.php?cmd=read&page=Problem%2025

The Fibonacci sequence is defined by the recurrence relation:
  Fn = Fn-1 + Fn-2, where F1 = 1 and F2 = 1.
Hence the first 12 terms will be:
  F1 = 1
  F2 = 1
  F3 = 2
  F4 = 3
  F5 = 5
  F6 = 8
  F7 = 13
  F8 = 21
  F9 = 34
  F10 = 55
  F11 = 89
  F12 = 144
The 12th term, F12, is the first term to contain three digits.
What is the first term in the Fibonacci sequence to contain 1000 digits?

フィボナッチ数で1000桁を超える最初の数の項数は?


なんとなく itertools.takewhile を使ってみた、これは条件に一致する間のイテレータを返す。

import math
import itertools
import datetime


def fib():
    yield 1
    
    a = 0
    b = 1
    while True:
        val = a + b
        a = b
        b = val
        yield val
        

def euler025():
    it = itertools.takewhile(lambda a: a < 10 ** 999, fib())
    print sum([1 for i in it]) + 1

    
begin = datetime.datetime.now()
euler025()
end   = datetime.datetime.now()
print end - begin

答え: 4782
実行時間: 0.005882秒くらい