b:= proc(n, p) option remember;
`if`(n<p, 0, b(n-1, p)+(1+b(n-p, p))*(n-1)!/(n-p)!)
end:
a:= n-> add(b(n, ithprime(i)), i=1..numtheory[pi](n)):
# Alternative:
b:= proc(n, g) option remember; `if`(n=0, `if`(isprime(g), 1, 0),
add(b(n-j, ilcm(j, g))*(n-1)!/(n-j)!, j=1..n))
end:
a:= n-> b(n, 1):