FFT及NTT模板
来源:互联网 发布:免费手机绿色上网软件 编辑:程序博客网 时间:2024/04/26 09:03
FFT
其中
无视这个板子,FFT照着NTT写就行了。
w[0]=(1,0)
w[1]=(cos(2*pi/len),sin(2*pi/len))
void DFT(node *a,int sig){ fo(i,0,len-1){ int p=0; for(int j=0,tp=i;j<ce;j++,tp/=2) p=(p<<1)+(tp%2); tt[p]=a[i]; } for(int m=2;m<=len;m*=2){ int half=m/2; fo(i,0,half-1){ node w; w.x=cos(i*sig*pi/half),w.y=sin(i*sig*pi/half); for(int j=i;j<len;j+=m){ node u=tt[j],v=tt[j+half]*w; tt[j]=u+v; tt[j+half]=u-v; } } } if (sig==-1) fo(i,0,len-1) tt[i].x/=len; fo(i,0,len-1) a[i]=tt[i];}void FFT(node *a,node *b,node *c){ int i; fo(i,0,len-1) e[i]=a[i],f[i]=b[i]; DFT(e,1);DFT(f,1); fo(i,0,len-1) e[i]=e[i]*f[i]; DFT(e,-1); fo(i,0,len-1) c[i]=e[i];}
NTT
考虑相对于FFT变化的地方。
ce的意义没有变化,其中,w数组需要预处理,
ni则表示len关于模数的逆元。
void DFT(int *a,int sig){ int i; fo(i,0,len-1){ int p=0; for(int j=0,tp=i;j<ce;j++,tp/=2) p=(p<<1)+(tp%2); tt[p]=a[i]; } for (int m=2;m<=len;m*=2){ int half=m/2,bei=len/m; fo(i,0,half-1){ int wi=sig>0?w[i*bei]:w[len-i*bei]; for(int j=i;j<len;j+=m){ int u=tt[j],v=(ll)tt[j+half]*wi%mo; tt[j]=(u+v)%mo; tt[j+half]=(u-v)%mo; } } } if (sig==-1) fo(i,0,len-1) tt[i]=(ll)tt[i]*ni%mo; fo(i,0,len-1) a[i]=tt[i];}void NTT(int *a,int *b,int *c){ int i; fo(i,0,len-1) A[i]=a[i],B[i]=b[i]; DFT(A,1);DFT(B,1); fo(i,0,len-1) A[i]=(ll)A[i]*B[i]%mo; DFT(A,-1); fo(i,0,len-1) c[i]=A[i];}
预处理部分
len=1; while (len<=n*2) len*=2; ni=quicksortmi(len,mo-2); ce=(db)log(len)/log(2); w[0]=1; w[1]=quicksortmi(GG,(mo-1)/len); fo(i,2,len) w[i]=(ll)w[i-1]*w[1]%mo;
GG表示模数的一个原根
0 0
- FFT及NTT模板
- [UOJ34]FFT && NTT 模板
- FFT & NTT 学习 模板
- NTT FFT 数论变换 快速傅里叶变换 模板
- [uoj 34 多项式乘法] FFT&NTT 模板
- [uoj 34 多项式乘法] FFT&NTT 模板
- fft & ntt
- FFT-NTT
- fft/ntt
- 快速傅里叶变换(FFT)和数论变换(NTT)模板
- 初识FFT和NTT
- BZOJ2179【FFT】【NTT】
- FFT、NTT小结
- FFT,NTT学习笔记
- hiho1388 FFT/NTT
- FFT & NTT学习心得
- FFT&NTT(草稿)
- FFT&&FWT&&NTT
- 数码问题 纪中 1433 优美的暴力
- UVA 536 - Tree Recovery(二叉树重建)
- C 标准库 - <stddef.h>
- 为你的Xcode项目手动创建PCH文件
- 博学谷云课堂“超级设计师”在线就业班送大礼
- FFT及NTT模板
- 剑指offer----旋转数组的最小数字----java实现
- Android实例:编写聊天界面
- nginx+php使用open_basedir限制站点目录防止跨站
- android反编译
- 定时执行脚本2
- eclipse的静态资源文件夹缓存问题
- studio 提交忽略
- 机器学习之(六)常见机器学习算法比较