#! /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()