分式分解,给小朋友们做现场的表演
小朋友们大家好!还记得我是谁吗?对了!我就是为忆哀配音的演员,忆艾!这天我来到了秦皇岛,为小朋友们做现场的爆零表演,然后有个小朋友突然举手,老远就看到一双兔耳朵:「求助:线性递推」,小粉兔抱着我呀,非常高兴!
好,我们现在来看看,已知
我们能够从这个东西中读出
好,其实我们把它算出来之后,我们可以在
我们接下来记
那么我们怎么计算
- 如果不用 FFT,我们考虑对
Q(x)/q_i(x) 可以在\Theta(nk) 时间计算,求逆可通过多项式辗转相除在\Theta(nk) 时间计算,总共时间就是\Theta(nk) ,因此总开销是\Theta(n^2) 。 - 如果用 FFT,我们容易通过分治树得到
P(x) \bmod q_i(x) 和Q(x)/q_i(x) \bmod q_i(x) 这两部分,在\Theta(n\log n\log r) 时间内。接下来考虑求逆,我们可以通过折半欧几里得在开个玩笑,大家应该也大都没写过多项式欧几里得,我们考虑这里\Theta(n\log ^2 n) 内完成。q_i(x) = (1-a_i x)^{k_i} ,做变量代换t = 1 - a_i x ,容易发现这一变换是保度数的,因此在这一变换下我们只需求P(\frac{1-t}{a_i}) 在\bmod t^{k_i} 意义下的逆,然后变换回去就是对应的逆,这一部分的总共时间开销是\Theta(n\log n) 。
综上,本问题得到较完满的解答。