Utilizando las soluciones propuestas a partir de las respuestas anteriores que he encontrado que sympy lamentablemente no computa el aparte() de lo racional inmediatamente. De alguna manera se confunde. Además, la lista de coeficientes python devueltos por * Poly.all_coeffs() * tiene una semántica diferente a la de una lista Mathmatica. De ahí la cláusula try-except-en la definición de a().
El siguiente código hace el trabajo y la salida, para algunos valores probados, está de acuerdo con las respuestas dadas por la fórmula Mathematica en Mathematica 7:
from __future__ import division
from sympy import expand, Poly, binomial, apart
from sympy.abc import x
A = Poly(apart(expand(((1-x**20)**5))/expand((((1-x)**2)*(1-x**2)*(1-x**5)*(1-x**10))))).all_coeffs()
def a(n):
try:
return A[n]
except IndexError:
return 0
def f(n):
v = n // 5
q = v // 20
r = v % 20
return sum(a[r+20*j]* binomial(q+5-j, 5) for j in range(5))
print map(f, [100, 50, 1000, 150])