令(b_i)为在答案中我们选择(x^i)系数的次数
那么显然
(sum_{i=0}^n b_i=m)
(sum_{i=0}^n i*b_i=k)
把方案数列出来
(prod_{i=0}^n (^{m-sum_{j=0}^{j-1}b_j}_{b_i}))
我们发现
若(p|m)
那么对于任意(b_i)
均有(p|b_i)
所以(p|k)
所以当(p|m)时
设(f(i,j))为(m=i,k=j)时的答案那么
当((k \% p==0))
(f(m,k)=f(m/p,k/p))
当((k \% p!=0))
(f(m,k)=0)
我们考虑这样计算答案
设(m=pa+b)
那么
(f(m,k)=sum_{i=0}^{k} f(pa,i)*f(b,k-i))
我们发现最多只有(min(k/p,n(p-1)))个i有值
且这样
(f(m,k)=sum_{i|k} f(a,i/k)*f(b,k-i))
只有(log_m^p)层
时间复杂度(O(n^2*p^2+n^2log_m^p))