きったんの頭

#! /usr/bin/env python3
"""
pe14.py
https://mind.kittttttan.info/py/pe14
"""

cache = {1:1}
def chain(n):
    if not cache.get(n, 0):
        if n & 1:
            cache[n] = 1 + chain(3 * n + 1)
        else:
            cache[n] = 1 + chain(n >> 1)
    return cache[n]

def pe14(limit=1000000):
    """
    Which starting number produces the longest Collatz chain?
    """
    m, mi = 0, 0
    for i in range(3, limit, 2):
        c = chain(i)
        if m < c:
            m, mi = c, i
    print(mi, m)

if __name__ == "__main__":
    pe14()