多项式全家桶

Posted by Dispwnl on March 2, 2019

多项式

  • 多项式乘法

多项式可以相乘!

$FFT,NTT​$啥的就是解决这个的……怎么证明求解就咕了

多项式可以求逆元!

对于一个多项式$f(x)$,定义它的最高项次数为这个多项式的度,即$deg$

根据逆元的定义,如果两个多项式$f(x),g(x)$满足$deg_g\le deg_f$,并且$f(x)g(x)\equiv 1(\mod x^n)$,则$g(x)$就是$f(x)$在模$x^n$下的逆元

如果知道$f(x)$,如何求解$g(x)$呢?

假设在模$x^{\left\lceil\frac{n}{2}\right\rceil}$意义下$f(x)$的逆元为$g’(x)$,则有$f(x)g’(x)\equiv 1(\mod x^{\left\lceil\frac{n}{2}\right\rceil})$

因为$g(x)$和$f(x)$在模$x_n$的意义下乘积只剩下一个常数项$1$,那么在模$x^{\left\lceil\frac{n}{2}\right\rceil}$的意义下乘积肯定也是$1$(即$g(x)$依然是$f(x)$的逆元)

有$f(x)g(x)\equiv 1(\mod x^{\left\lceil\frac{n}{2}\right\rceil})​$

这个与上面模数相同了,可以相减

$f(x)(g(x)-g’(x))\equiv 0(\mod x^{\left\lceil\frac{n}{2}\right\rceil})​$

同除$f(x)$,$g(x)-g’(x)\equiv 0(\mod x^{\left\lceil\frac{n}{2}\right\rceil})$

两边平方(?)

$g^2(x)+g’^2(x)-2g(x)g’(x)\equiv 0(\mod x^n)​$

诶等等为什么模数也可以平方啊……

前面那个式子因为取模后为$0​$,说明其在$0\sim x^{\left\lceil\frac{n}{2}\right\rceil}-1​$次的系数都为$0​$(只对第$x^{\left\lceil\frac{n}{2}\right\rceil}​$项取模),考虑平方相当于两个相同的多项式相乘,即$\sum_{i=0}^{n}G_iG_{n-i}​$,这个式子任何时候都有一项的次数小于$x^{\left\lceil\frac{n}{2}\right\rceil}​$,所以模数可以平方(注意只有右边为$0​$才可以平方模数)

同时乘上$f(x)​$,$g^2(x)f(x)+g’^2(x)f(x)-2g(x)g’(x)f(x)\equiv 0(\mod x^n)​$

化简移项得$g(x)\equiv 2g’(x)-f(x)g’^2(x)(\mod x^n)​$(注意这里是在模$x^n​$的意义下所以$f(x)g’(x)​$不能化简)

这样就可以通过$g’(x)​$求出$g(x)​$

发现$f(x)​$在模$x^1​$的意义下逆元为常数项的逆元,所以可以用常数项推出$f(x)​$在模$x^n​$意义的逆元,如果常数项没有逆元,$f(x)​$也就没有逆元了

多项式可以开根!

如果有$g^2(x)\equiv f(x)(\mod x^n)$,则$g(x)$是$f(x)$在模$x^n$意义下的平方根

跟多项式求逆的思路差不多,假设现在知道了$g’^2(x)\equiv f(x)(\mod x^{\left\lceil\frac{n}{2}\right\rceil})​$

移项得

$g’^2(x)-f(x)\equiv 0(\mod x^{\left\lceil\frac{n}{2}\right\rceil})$

是不是又可以平方了?$(g’^2(x)-f(x))^2\equiv 0(\mod x^n)​$

拆开得

$g’^4(x)+f^2(x)-2f(x)g’^2(x)\equiv 0(\mod x^n)​$

移项化简得

$(\frac{g’^2(x)+f(x)}{2g’(x)})^2\equiv f(x)(\mod x^n)$

左边的那一坨就是要求的$g(x)​$了

多项式可以除法!

如果有$f(x)=g(x)G(x)+F(x)​$,则$G(x)​$为商,$F(x)​$为余数

设$a’(x)​$表示$x^na(\frac{1}{x})​$,把$\frac{1}{x}​$代入原式,两边再同乘$x^n​$

$x^nf(\frac{1}{x})=x^ng(\frac{1}{x})G(\frac{1}{x})+x^nF(\frac{1}{x})​$

发现可以用$a’(x)​$代替一些多项式

$f’(x)=g’(x)G’(x)+x^{n-k+1}F’(x)$($k$是$g(x)$的最高次)

$x^{n-k+1}F’(x)​$的最低次项肯定要不小于$n-k+1​$,而要求的$G(x)​$的最高次项肯定要小于$n-k+1​$的

所以在模$x^{n-k+1}​$的情况下,$x^{n-k+1}F’(x)​$可以被忽略而不影响$G(x)​$

所以多项式求一下$g’(x)​$的逆元,然后求出$G’(x)​$从而得到$G(x)​$

多项式可以取模!

求出上面的$G(x)$然后求$F(x)=f(x)-g(x)G(x)$即可

  • 代码
  • 分治$FFT$(多项式分治)

多项式可以分治求解!

如果有$f(i)=\sum_{j=1}^{i}f(i-j)g(j)$,并且已经知道$g(x)$每一项的系数,现在要快速求解$f(x)$的每一项系数,其中$f(0)=1$

考虑如果已知$f(l)\sim f(mid)​$的值,就可以求出它们对于$f(mid+1)\sim f(r)​$的贡献,对$x​$的贡献即为$\sum_{i=l}^{mid}f(i)g(x-i)​$

这样就类似一个$CDQ$分治的过程,可以$O(n\log^2n)$求解了

生成函数

  • 普通型生成函数

对于一个数列,它的普通型生成函数就是$\sum_{i=0}^{∞}a_ix^i​$

考虑这么一个问题:

$A​$物品只能拿奇数个,$B​$物品只能拿偶数个,求拿$n​$个物品的方案数

$A$的生成函数为$x+x^3+x^5+…$,根据无穷项等比数列求和公式可得这个玩意是$\frac{x}{1-x^2}$

$B$的生成函数为$1+x^2+x^4+…$,这个玩意是$\frac{1}{1-x^2}​$

则答案就是它们相乘后$x^n$的系数

普通型生成函数用来解决组合问题(物品不要求顺序)

  • 指数型生成函数

对于一个数列,它的指数型生成函数就是$\sum_{i=0}^{∞}\frac{a_i}{i!}x^i$

考虑这么一个问题:

$A$物品只能拿奇数个,$B$物品只能拿偶数个,拿的顺序不同算不同方案,求拿$n$个物品的方案数

$A$的生成函数为$x+\frac{1}{3!}x^3+\frac{1}{5!}x^5+…$,这个玩意是$\frac{e^x-e^{-x}}{2}$

$B$的生成函数为$1+\frac{1}{2!}x^2+\frac{1}{4!}x^4+…$,这个玩意是$\frac{e^x+e^{-x}}{2}$

则答案就是它们相乘之后$x^n$的系数乘上$n!$的值

指数型生成函数用来解决排列问题(物品要求顺序)

  • 列一些常用的公式

$1+x+\frac{x^2}{2!}+\frac{x^3}{3!}+…=e^x​$

$1-x+\frac{x^2}{2!}-\frac{x^3}{3!}+…=e^{-x}​$

$1+\frac{x^2}{2!}+\frac{x^4}{4!}+\frac{x^6}{6}…=\frac{e^x+e^{-x}}{2}​$

$x+\frac{x^3}{3!}+\frac{x^5}{5!}+\frac{x^7}{7}…=\frac{e^x-e^{-x}}{2}$

$x-\frac{x^2}{2}+\frac{x^3}{3}+…=\ln(1+x)​$

$x-\frac{x^3}{3}+\frac{x^5}{5}+…=\sin x​$

$1-\frac{x^2}{2}+\frac{x^4}{4}+…=\cos x$

$1+x+x^2+x^3+…=\frac{1}{1-x}$

$1+ax+\frac{a(a-1)x^2}{2!}+\frac{a(a-1)(a-2)x^3}{3!}+…=(1+x)^a$

拉格朗日插值

  • 公式

记住得了

有$F(x)$,表示一个$N$次多项式,现在已经知道了它在给定的$n$个点下的值

则有$F(x)=\sum_{i=0}^{n}F(x_i)\prod_{j=0,j\not= i}^{n}\frac{x-x_j}{x_i-x_j}$,这样就可以$O(n^2)$求解了