57.py 616 B

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. #!/usr/bin/env python
  2. # https://en.wikipedia.org/wiki/Continued_fraction#Some_useful_theorems
  3. def nom(n):
  4. nexth = hp = hpp = 1
  5. while n > 0:
  6. nexth = 2 * hp + hpp
  7. hpp = hp
  8. hp = nexth
  9. n -= 1
  10. return nexth
  11. def denom(n):
  12. kpp = 0
  13. nextk = kp = 1
  14. while n > 0:
  15. nextk = 2 * kp + kpp
  16. kpp = kp
  17. kp = nextk
  18. n -= 1
  19. return nextk
  20. def ndig(n, base=10):
  21. i = 0
  22. while n > 0:
  23. i += 1
  24. n /= base
  25. return i
  26. count = 0
  27. for n in xrange(1, 1001):
  28. if ndig(nom(n)) > ndig(denom(n)):
  29. count += 1
  30. print count