#!/usr/bin/env python3 from itertools import combinations_with_replacement as comb bound = 200 sieve = [i-1 for i in range(bound+1)] dup = [] def rec(chain, sieve, bound, id=0): c = 1 for m in chain: n = m+chain[0] if n > bound: continue if len(chain) >= max(sieve[n:n+3]): #<-- trial and error magic continue if len(chain) < sieve[n]: sieve[n] = len(chain) c += rec([n] + chain, sieve, bound, id+1) return c rec([1], sieve, bound) print(sum(sieve[2:]))