ntt

多项式全家桶

时光怂恿深爱的人放手 提交于 2019-11-26 20:58:02
前置芝士:麦克拉伦展开,泰勒展开,牛顿迭代,快速傅里叶变换,标记($mod x^n$)。 正片: 1.多项式加法。 2.多项式减法。 3.多项式乘法。 4.多项式求逆。 5.多项式带余除法。 6.多项式开根。 7.多项式对数函数。 8.多项式指数函数。 9.多项式的k次幂/k次方根 10.多项式插值 正片开始: 1.多项式加法:(略) 2.多项式减法:(略) 3.多项式乘法:(FFT即可) 4.多项式求逆: 传送门: 设原多项式为$H(x)$,所求为$F(x)(mod \; x^t)$ 假设对于所求多项式$G(x)\equiv F(x)(mod \; x^n)$的$G(x)$已经得到,那么: $G(x)H(x)\equiv 1(mod \; x^n)$ $G(x)H(x)-1\equiv 0(mod \; x^n)$ $[G(x)H(x)-1]^2\equiv 0(mod \; x^{2n})$ $G(x)^2H(x)^2-2G(x)H(x)+1\equiv 0(mod \; x^{2n})$ $G(x)H(x)[2-G(x)H(x)]\equiv 1(mod \; x^{2n})$ $\frac{1}{H(x)}\equiv G(x)[2-G(x)H(x)](mod \; x^{2n})$ $F(x)\equiv G(x)[2-G(x)H(x)](mod \; x^{2n})$

多项式全家桶

拜拜、爱过 提交于 2019-11-26 20:57:31
多项式乘法: 然而蒟蒻的我并不会证明 $FFT$: 1 struct cp{ 2 dd x,y; 3 friend cp operator + (const cp &s1,const cp &s2){ return (cp){s1.x+s2.x,s1.y+s2.y}; } 4 friend cp operator - (const cp &s1,const cp &s2){ return (cp){s1.x-s2.x,s1.y-s2.y}; } 5 friend cp operator * (const cp &s1,const cp &s2){ return (cp){s1.x*s2.x-s1.y*s2.y,s1.y*s2.x+s1.x*s2.y}; } 6 }A[N1],B[N1],C[N1]; 7 8 int r[N1]; 9 void FFT(cp *s,int len,int type) 10 { 11 int i,j,k; 12 for(i=0;i<len;i++) if(i<r[i]) swap(s[i],s[r[i]]); 13 for(k=2;k<=len;k<<=1) 14 { 15 cp wn=(cp){cos(2.0*pi*type/k),sin(2.0*pi*type/k)},w,t; 16 for(i=0;i<len;i+=k) 17 { 18 w=

多项式全家桶

别等时光非礼了梦想. 提交于 2019-11-26 20:57:15
开头Orz yww,Orz xfz,Orz dtz,Orz lyy 部分转载自 yww的博客 、 dtz的博客 一些定义 一个关于$x$的多项式$A(x)$可以表示为如下形式和: $$A(x)=\sum\limits_{i=0}^{n-1}a_{i}x^{i}$$ 其中$a_0,a_1,a_2......a_{n-1}$称为多项式$A(x)$的系数,如果$A(x)$最高次数的一个非零项系数为$a_k$,则称其次数为$k$。任意一个严格大于$k$的整数都可以作为这个多项式的次数界,即对于一个次数界为$n$的多项式,他的次数可以是$[0,n-1]$中的任意一个整数。 多项式加减法 略 多项式乘法 直接FFT or NTT 代码: FFT: 1 #include<iostream> 2 #include<cstring> 3 #include<cstdio> 4 #include<cmath> 5 #define pw(n) (1<<n) 6 using namespace std; 7 const double pi=acos(-1); 8 struct complex{ 9 double a,b; 10 complex(double _a=0,double _b=0){ 11 a=_a; 12 b=_b; 13 } 14 friend complex operator +

洛谷P5158 【模板】多项式快速插值

非 Y 不嫁゛ 提交于 2019-11-26 20:43:52
题面 传送门 前置芝士 拉格朗日插值 , 多项式多点求值 题解 首先根据拉格朗日插值公式我们可以暴力 \(O(n^2)\) 插出这个多项式,然而这显然是 \(gg\) 的 那么看看怎么优化,先来看一看拉格朗日插值的公式 \[f(x)=\sum_{i = 1}^{n} y_i \prod_{i \not = j} \frac{x - x_j}{x_i - x_j}\] 转化一下 \[f(x)=\sum_{i = 1}^{n}{ y_i\over \prod_{i \not = j}{x_i - x_j}} \prod_{i \not = j}(x - x_j)\] 来考虑一下 \({ y_i\over \prod_{i \not = j}{x_i - x_j}}\) 这个东西,上面是个常数,那么只考虑下面。如果我们设多项式 \(g(x)=\prod_{i=1}^n (x-x_i)\) ,那么下面那个东西就是 \({g(x_i)\over (x-x_i)}\) 这分子分母全为 \(0\) 我怎么求啊…… 根据 我也不知道是啥的 洛必达法则,如果 \[\lim_{x\to a}f(x)=0,\lim_{x\to a}g(x)=0\] 则有 \[\lim_{x\to a}{f(x)\over g(x)}=\lim_{x\to a}{f'(x)\over g'(x)}\]