project-euler

https://projecteuler.net/
Log | Files | Refs | README

Euler_92.py (479B)


      1 import sys
      2 
      3 squares = [i * i for i in range(10)]
      4 cache = [0] * 10000000
      5 count = 0
      6 
      7 def sum_digit_squares(n):
      8     s = 0
      9     while n:
     10         s += squares[n % 10]
     11         n //= 10
     12     return s
     13 
     14 for n in range (1, 10000000):
     15     m = n
     16 
     17     while True:
     18         m = sum_digit_squares(m)
     19 
     20         if m == 1 or cache[m] == 1:
     21             cache[n] = 1
     22             break
     23         if m == 89 or cache[m] == 89:
     24             cache[n] = 89
     25             count += 1
     26             break
     27 print count