多项式
多项式各种运算都是在 \(\pmod {x^n}\) 的意义下进行的。
牛顿迭代
多项式操作大量用到牛顿迭代思想,举个简单的例子:
如果 \(f(x)=x^2+7x+3\),求一个根,可以设置一个合理的初值比如 \(0\),
然后不断计算 \(x=x-\frac{f(x)}{f'(x)}\),几何上相当于在 \((x,f(x))\) 处做切线向 \(0\) 点靠近。
\(x_0=0,f_0=3\),\(x_1=-0.42857,f_1=0.1837\),\(x_2=-0.45847,f_2=0.0009\),\(x_3=-0.45862,f_3=0\)。
多项式牛顿迭代
在上例中 \(x\) 是一个变量,现在 \(x\) 换为多项式。
现在要求 \(F(g(x))=0\),为方便起见,直接记为 \(F(g)=0\),则不断计算 \(g=g-\frac{f(g)}{f'(g)}\)。注意,这里 \(g\) 是关于 \(x\) 的多项式。
不断迭代上式,每次求到的有效位数会翻倍。
多项式求逆
已知多项式 \(f(x)\),要求 \(g(x)\) 满足 \(f(x)g(x)=1\)。
稍微移项,\(f(x)g(x)-1=0\)。如果令 \(F(g)=fg-1\),迭代的式子为:
\(g=g-\frac{F(g)}{F'(g)}= g-\frac{fg-1}{f}=g-g+\frac{1}{f}\) 虽然正确,但很平凡。
尝试令 \(F(g)=f-\frac{1}{g}\),此时牛顿迭代变为:
\(g=g-\frac{F(g)}{F'(g)}=g-\frac{f-\frac{1}{g}}{\frac{1}{g^2}}=g-fg^2+g=g(2-fg)\)。
很显然 \(g_0=\frac{1}{f_0}\),因为这是唯一产生 \(fg_0=1\) 的项。
每迭代一次,项数翻倍,共需 \(log\) 次迭代。
复杂度为 \(T(n)=T(\frac{n}{2})+O(nlogn)=O(nlogn)\)。
多项式除法
求 \(f(x)/g(x)\),等于 \(f(x)\frac{1}{g(x)}\),可以先对 \(g(x)\) 求逆,再做多项式乘法。
复杂度 \(O(nlogn)\)。
多项式微分
\(F(x)=a_0+a_1x+a_2x^2+a_3x^3+a_4x^4...\)。
\(f(x)=F'(x)=a_1+2a_2x+3a_3x^2+4a_4x^3...\)。
复杂度 \(O(n)\)。
多项式积分
\(f(x)=a_0+a_1x+a_2x^2+a_3x^3+a_4x^4...\)。
\(F(x)=\int f(x)=a_0x+\frac{a_1}{2}x^2+\frac{a_2}{3}x^3+\frac{a_3}{4}x^4+\frac{a_4}{5}x^5...\)。
复杂度 \(O(n)\)。
多项式对数
\(\ln' f(x)=f'(x)/f(x)=f'(x)\frac{1}{f(x)}\)
进行积分可得 \(\ln f(x)=f'(x)/f(x)=\int f'(x)\frac{1}{f(x)}\)
复杂度 \(O(nlogn)\)。
指数
\(g(x)=e^{f(x)}\),若令 \(F(g)=g-e^f\),则迭代
\(g=g-\frac{F(g)}{F'(g)}=g-\frac{g-e^f}{1}=e^f\) 很平凡。
若令 \(F(g)=\ln g- \ln e^f=\ln g-f\),则迭代
\(g=g-\frac{F(g)}{F'(g)}=g-\frac{\ln g-f}{\frac{1}{g}}=g(1-\ln g +f)\)。
迭代起点 \(g_0=1\)。
复杂度 \(T(n)=T(n/2)+O(nlogn)=O(nlogn)\)
开方
\(g(x)=f^{1/2}(x)\),可以令 \(F(x)=g^2(x)-f(x)\)
\(g=g-\frac{F(g)}{F'(g)}=g-\frac{g^2-f}{2g}=\frac{g+fg^{-1}}{2}\)。
迭代起点需要用二次剩余计算 \(g_0=\sqrt{f_0}\)。
复杂度 \(T(n)=T(n/2)+O(nlogn)=O(nlogn)\)
快速幂
求 \(f^k(x)\),\(\ln f^k(x)=k\ln f(x)\)
故 \(f^k(x)=e^{k\ln f(x)}\)。
所以求对数后乘上常数再指数一下就可以了。
复杂度 \(O(nlogn)\)。

浙公网安备 33010602011771号