为了方便本文的叙述,作出如下可能不严谨的定义:
(1)、如无特殊说明,(f)表示一个多项式。
(2)、如无特殊说明,(F)表示一个以多项式为参数的函数。
这篇文章主要是想求解这个东西:
[frac{d}{dx}f=F(f) (mod x^n)
]
一般情况下(f)可以放到等式右边然后就可以用牛顿迭代来求零点了...然而这个微分非常讨厌,怎么办呢,我们还是来考虑倍增。
先来考虑泰勒展开式,假设上一次迭代的结果是(widehat f),那么:
[frac{d}{dx}f=sum_{i=0}^{infty}frac{F^{(i)}(widehat f)}{i!}(f-widehat f)^i
]
显然(igeq 2)的项都是没有用的,于是改写为:
[frac{d}{dx}f=F(widehat f)+F'(widehat f)(f-widehat f)
]
拆项、移项:
[frac{d}{dx}f-F'(widehat f)f=F(widehat f)-F'(widehat f)widehat f
]
下面就是一波神仙操作了,我们设一个(r),其值为:
[r=e^{-int F'(widehat f) dx}
]
考虑其微分,利用复合函数求导法则得:
[frac{d}{dx}r=e^{-int F'(widehat f) dx}cdot(-F'(widehat f))=-F'(widehat f)r
]
考虑对之前得式子左右同乘(r):
[frac{d}{dx}fcdot r-F'(widehat f)fcdot r=(F(widehat f)-F'(widehat f)widehat f)cdot r
]
于是可以发现等式左边的第二项可以转化,变为(fcdot frac{d}{dx}r),于是等式左边就可以再利用求导法则转化:
[frac{d}{dx}fcdot r+fcdot frac{d}{dx}r=frac{d}{dx}(fcdot r)=(F(widehat f)-F'(widehat f)widehat f)cdot r
]
于是对两边进行积分:
[fcdot r=int (F(widehat f)-F'(widehat f)widehat f)cdot r dx
]
显然再同除以(r):
[f=frac{int (F(widehat f)-F'(widehat f)widehat f)cdot r dx}{r}
]
于是就可以倍增了...这操作真的是好强好强。
( m upd):分治( m FFT)好啊...常数可以吊打上面的做法...