(Sage)
Pol.<x> = InfinitePolynomialRing(QQ)
@cached_function
def Z(n):
if n==0: return Pol.one()
return sum(x[k]*Z(n-k) for k in (1..n))/n
def a(n, k=3):
P = Z(n)
q = 0
coeffs = P.coefficients()
for mon in enumerate(P.monomials()):
m = Pol(mon[1])
p = 1
V = m.variables()
T = cartesian_product(k*[V])
Tsorted = [tuple(sorted(u)) for u in T]
Tset = set(Tsorted)
for t in Tset:
r = [Pol.varname_key(str(u))[1] for u in t]
j = [m.degree(u) for u in t]
D = 0
lcm_r = lcm(r)
for d in divisors(lcm_r):
try: D += d*m.degrees()[-d-1]
except: break
p *= D^(Tsorted.count(t)*prod(r)/lcm_r*prod(j))
q += coeffs[mon[0]]*p
return q
|