from tools import number_theory def get(x, y, lst, dct): if x > y: return dct[(x, y)] return lst[x] def count(limit): prime = list(number_theory.make_prime(1000)) lst = [0, 0, 1, 1, 1, 2] dct = {(4, 3): 1, (4, 2): 1, (5, 3): 1, (5, 2): 0} num = 5 while lst[-1] <= limit: num += 1 tale = 0 for p in prime: if p > num: break tale += get(num - p, p, lst, dct) dct[(num, p)] = tale if num in prime: tale += 1 lst.append(tale) return len(lst) - 1 print(count(5000))