【数学】多项式(原理)

多项式加减乘法

\[h1(x)=\sum\limits_{i=0}^{n1-1}h_{1i}\cdot x^i; \forall i \ge n1, h1_{i} = 0.\\ h2(x)=\sum\limits_{i=0}^{n2-1}h_{2i}\cdot x^i; \forall i \ge n2, h2_{i} = 0.\\ \]

加减法是对应项系数加减法

\[n=\max(n1,n2),f(x)=(h1+h2)(x)=\sum\limits_{i=0}^{n-1}(h1_{i}+h2_{i}) \cdot x^i\\ n=\max(n1,n2),f(x)=(h1-h2)(x)=\sum\limits_{i=0}^{n-1}(h1_{i}-h2_{i}) \cdot x^i\\ \]

乘法是卷积。

\[n=n1+n2-1,f(x)=(h1+h2)(x)=\sum\limits_{i=0}^{n-1}\sum\limits_{j=0}^{i}(h1_{j}+h2_{i-j}) \cdot x^i\\ \]

多项式求逆

多项式求导 | 积分

下面的求导仅局限于 \(f(x)\) 是一个至多 \(n-1\) 次的多项式。

\[f(x)=\sum\limits_{i=0}^{n-1}f_i\cdot x^i\\ f'(x)=\sum\limits_{i=0}^{n-2}f_{i+1}\cdot {(i+1)} \cdot x^i\\ \]

下面的积分仅局限于 \(f(x)\) 是一个至多 \(n-1\) 次的多项式。且积分结果是模 \(x^n\) 意义下的。

\[f(x)=\sum\limits_{i=0}^{n-1}f_i\cdot x^i\\ \int f(x)=C+\sum\limits_{i=1}^{n-1}\frac{f_{i-1}}{i} \cdot x^i\\ \]

一般不会单独使用,只在多项式对数时使用。

多项式对数

求多项式的对数,由其定义要求常数项为1。

\(\ln f(x)\) 的值,求导之后再不定积分就得到原本的值,即

\[\ln f(x)=\int (\ln f(x))'=\int \frac{f(x)'}{f(x)} \]

这里要求 \(f(x)\) 的逆,是 \(O(n\log n)\) 的,求导和积分都是 \(O(n)\) 的。

总复杂度 \(O(n\log n)\)

多项式指数

分治FFT法。

\(O(n\log ^2n)\)

多项式快速幂

https://www.luogu.com.cn/problem/P5245

\[h(x)=\sum\limits_{i=0}^{n-1}h_i\cdot x^i\\ \]

\[f(x)=(h(x))^k\\ \]

\(h_0=1\) 时,可以使用多项式对数进行加速。

\[\ln (h(x)^k)=k \ln h(x)\\ f(x)=e^{\ln f(x)}=e^{k \ln h(x)}\\ \]

这里的k对 \(MOD\) 取模的,大概是因为他是直接作用于log吧。

\(h_0\ne 0\) 时,记 \(H(x)=\frac{h(x)}{h_0}=\sum\limits_{i=0}^{n-1}\frac{h_i}{h_0}x^i\)

\[f(x)=e^{\ln f(x)}=e^{k \ln h(x)}=e^{k (\ln {H(x)} + \ln h_0)}\\ =e^{k \ln {H(x)} + k\ln h_0}\\ =e^{k \ln {H(x)}}\cdot e^ {k\ln h_0}\\ =e^{k \ln {H(x)}}\cdot e^ {\ln (h_0)^k}\\ =e^{k \ln {H(x)}}\cdot (h_0)^k\\ \]

这里第一个k是要对MOD取模(先作用于log),第二个k是要对 \(\varphi(MOD)\) 取模(原本是指数)。

模板

这个模板把多项式传进去,然后传入多项式的原始长度(也就是,项数,a[0]...a[n-1]共n项)。会自动扩展成2的幂然后丢到FNTT转换,输出的时候只使用前n项即可(假如是模 x^n 意义的话,a[n]之后就是0了)。

posted @ 2021-01-29 15:00  purinliang  阅读(437)  评论(0编辑  收藏  举报