(PARI) a(n) = { res = 1; my(d = divisors(n! >> val(n, 2))); forstep(i = #d, 1, -1, if(ispal(d[i]), res = d[i]; break; ) ); d = divisors(n! / 5^val(n, 5)); forstep(i = #d, 1, -1, if(d[i] < res, return(res); ); if(ispal(d[i]), res = d[i]; break; ) ); res }
ispal(n) = my(d = digits(n)); d == Vecrev(d)
(Python)
from sympy import divisors, factorial, multiplicity
def ispal(n): s = str(n); return s == s[::-1]
def b(n, k): f = factorial(n); return f//k**multiplicity(k, f)
def a(n):
m2 = max(d for d in divisors(b(n, 2), generator=True) if ispal(d))
m5 = max(d for d in divisors(b(n, 5), generator=True) if ispal(d))
return max(m2, m5)