##A number chain is created by continuously adding the square of the digits in a
##number to form a new number until it has been seen before.
##For example,
##44→32→13→10→1→1
##85→89→145→42→20→4→16→37→58→89
##Therefore any chain that arrives at 1 or 89 will become stuck in an endless
##loop. What is most amazing is that EVERY starting number will eventually
##arrive at 1 or 89.
##How many starting numbers below ten million will arrive at 89?

maxlen = 10000000


def fi():
    v = [False, False, True]

    def f(n):
        if n < len(v):
            return v[n]
        s = int("".join(sorted(str(n))))
        if s < len(v):
            return v[s]
        return f(sum(int(c) ** 2 for c in str(n)))

    for i in range(3, maxlen):
        if i % 100000 == 0:
            print(i)
        v.append(f(i))
    return len([i for i in v if i])


print(fi())
