g=lambda k:1/k|any(abs(round(5**.5*i)**2-5*i*i)==4>k%i<g(k/i)for i in range(k+1)) f=lambda n,k=1:n and f(n-g(k),k+1)or~-k for n in range(1, 21) + [100]: print '%3d: %3d' % (n, f(n))
Standard input is empty
1: 1 2: 2 3: 3 4: 4 5: 5 6: 6 7: 8 8: 9 9: 10 10: 12 11: 13 12: 15 13: 16 14: 18 15: 20 16: 21 17: 24 18: 25 19: 26 20: 27 100: 315