Here is a much faster version using numpy
from numpy.fft import fft, ifft
import numpy as np
def func(f, d):
a = np.zeros((d*f,))
a[:f] = np.ones((f,))
x = ifft(fft(a) ** d)
return [int(z) for z in x + .49][:d*(f-1) + 1]
def test_it(f, d):
sums = find_sums(d, f)
table = [v for k, v in sorted(sums.items())]
assert func(f, d) == table