#!/usr/bin/env python3 from functools import lru_cache from math import isqrt @lru_cache(None) def extend(T): B=set(T) S={x+y for x in B for y in B} if 113 in S: return False D=S-{x*y for x in B for y in B} if not D: return True def factors(s): return [(u,s//u) for u in range(1,isqrt(s)+1) if s%u==0 and s//u<=112 and 113-u not in B and 113-s//u not in B and u+s//u!=113] s=min(D,key=lambda v:len(factors(v))) return any(extend(tuple(sorted(B|{u,v}))) for u,v in factors(s)) A=set(range(1,14))|{16,113}|set(range(15,110,2)) print({a+b for a in A for b in A}<={a*b for a in A for b in A}) print(extend((1,2,3,5,7))) print(extend.cache_info())