多项式算法学习笔记

来学习一个多项式全家桶。

基本算法

FFT

先咕着。

NTT

先咕着。

数学

多项式求导

这其实是高中数学内容。

对于多项式 \(F(x)=u(x)+v(x)\),它的导数\(F'(x)=u'(x)+v'(x)\)

再结合\(u(x)=x^n, u'(x)=nx^{n-1}\),就可以愉快地线性时间求出导数。

多项式积分

直接根据公式

\[\int F(x)dx = (\sum^{n}_{i=0}\frac{f_i}{i+1}x^{i+1})+c \]

那么右边就是

\[f_0x+\frac{f_1}{2}x^2+\frac{f_2}{3}x^3+\frac{f_3}{4}x^4+...+\frac{f_n}{n+1}x^{n+1}+c \]

原函数

\[F(x)=f_0+f_1x+f_2x^2+f_3x^3+...+f_nx^n \]

\(c\)咋整啊,直接等 \(0\) 吧。

那么就可以线性做完了。

多项式求逆

对于函数 \(F(x)\),求一个多项式 \(G\)(x),使得在每一项系数模 \(x^n\) 时,有\(F(x)*G(x) \equiv 1 \pmod {x^n}\)

如果 \(F\) 只有一项,那么就变成了单项式求逆元。

如果有 \(n\) 项呢?

假设我们先求出来了模 \(x^{\lceil \frac{n}{2} \rceil}\) 的逆为 \(G'\),则:

\[F*G' \equiv 1 \pmod {x^{\lceil \frac{n}{2} \rceil}} \]

\[F*G \equiv 1 \pmod {x^{\lceil \frac{n}{2} \rceil}} \]

上减下,除掉 \(F\)

\[G'-G \equiv 0 \pmod {x^{\lceil \frac{n}{2} \rceil}} \]

平方

\[(G'-G)^2 \equiv 0 \pmod {x^n} \]

拆开

\[G'^2-2GG'+G^2 \equiv 0 \pmod {x^n} \]

乘上 \(F\)

\[FG'^2-2G'+G \equiv 0\pmod{x^n} \]

移项

\[G \equiv 2G'-FG'^2 \pmod{x^n} \]

递归算就行了。

多项式对数函数

多项式 \(F\),求 \(G \equiv ln(F) \pmod {x^n}\)

\(A(x)=ln(x)\),有

\[G(x)=A(F(x)),A'(x)=\frac{1}{x} \]

求导

\[G'(x)=A'(F(x))F'(x)=\frac{F'(x)}{F(x)} \]

求导求逆乘一起就行了。

泰勒展开

求一个函数 \(f(x)\) 在某一点的值,可以构造一个函数 \(g(x)\),使得

\[f(x) \approx g(x) = g(0) + \frac{f^1(0)}{1!}x + \frac{f^2(0)}{2!}x^2 + ... + \frac{f^n(0)}{n!}x^n \]

其中 \(f^n(0)\) 表示对原函数的图像上 \(0\) 这个点进行 \(n\) 阶求导。

牛顿迭代

求函数 \(G(x)\) 的零点,即求满足 \(G(F(z)) \equiv 0 \pmod {z^n}\) 的多项式 \(F(z)\)

\(n=1\) 时,提前求出\(G(F(z)) \equiv 0 \pmod {z^n}\)

现在假设求出了

\[G(F_0(z)) \equiv 0 \pmod{z^{ \lceil \frac{n}{2} \rceil}} \]

进行泰勒展开

\[G(F(z))=G(F_0(z))+\frac{G'(F_0(z))}{1!}(F(z)-F_0(z))+\frac{G''(F_0(z))}{2!}(F(z)-F_0(z))^2+... \]

因为 \(F(z)\)\(F_0(z)\) 的最后 \(\lceil \frac{n}{2} \rceil\) 项相同,所以 \((F(z)-F_0(z))^2\) 的最低非 \(0\) 项次数大于 $2 \lceil \frac{n}{2} \rceil $,所以

\[G(F(z)) \equiv G(F_0(z))+G'(F_0(z))+G'(F_0(z))(F(z)-F_0(z)) \pmod{z^n} \]

\(G(F(z)) \equiv 0 \pmod{z^n}\),得到

\[F(z) \equiv F_0(z) - \frac{G(F_0(z))}{G'(F_0(z))} \pmod{z^n} \]

迭代就可以了。

多项式指数函数

\(F(x)\equiv e^{A(x)} \pmod{x^n}\)

取对数并移项

\[\ln F(x) - A(x)=0 \]

\(G(F(x)) = \ln F(x) - A(x)\),则求 \(G(F(x))=0\)

求导

\[G'(F(x)) = \frac{1}{F(x)} \]

假设已经求出了 \(F_0(x) \equiv e^{A(x)} \pmod{x^{\lceil\frac{n}{2}\rceil}}\),代入牛顿迭代公式

\[F(x) \equiv F_0(x) - \frac{G(F_0(x))}{G'(F_0(x))} \pmod{x^n} \\ F(x) \equiv F_0(x)(1 - \ln F_0(x) + A(x)) \pmod{x^n} \]

\(A(0)=0\),所以 \(F(x)\) 的常数项为 \(1\)

也可以递归求解了。

posted @ 2020-02-24 08:28  SamBillon  阅读(263)  评论(0编辑  收藏  举报