orzzzzzzzzzzzzzzzzzzz
求整数n的不同拆分方案数
多项式可以做到 O(nlogn)
窝们先可以得到它的生成函数
f(x)=1∏ni=1(1−xi)
对两边同时取对
lnf(x)=∑i=1n−ln(1−xi)
右边泰勒展开得到多项式
A(x)=∑i=1n∑j>=1xijj=∑j>=11j∑i=1nxij
虽然是指数也是可以模掉 xn 的,所以 ij<=n ,复杂度就是 O(nlogn) 了
现在就只需要求
f(x)=eA(x)
滋磁!
求
f(x)=lnA(x)
:
设
B(A(x))=ln(A(x))
则有
B′(A(x))=A′(x)A(x)
求 f(x)=eA(x) :
设已经求出了
f(x)
的前n项
f0(x)
有
f(x)≡f0(x)(mod xn)
设
g(f(x))=lnf(x)−A(x)=0
泰勒展开得
0≡g(f0(x))+g′(f0(x))(f(x)−f0(x)) (mod x2n)
所以有
f(x)≡f0(x)−g(f0(x))g′(f0(x)) (mod x2n)
得
f(x)=f0(x)−lnf0(x)−A(x)1f0(x)=f0(x)(1−lnf0(x)+A(x))