FFT模板
2016-09-04 17:12
337 查看
#define pi acos(-1) #define maxn 222222 using namespace std; struct plex { ///定义一个复数类 double x, y; plex (double _x = 0.0, double _y = 0.0) : x (_x), y (_y) {} plex operator + (const plex &a) const { return plex (x+a.x, y+a.y); } plex operator - (const plex &a) const { return plex (x-a.x, y-a.y); } plex operator * (const plex &a) const { return plex (x*a.x-y*a.y, x*a.y+y*a.x); } }; void change (plex *y, int len) { int i, j, k; for(i = 1, j = len / 2; i < len - 1; i++) { if (i < j) swap(y[i], y[j]); k = len / 2; while (j >= k) { j -= k; k /= 2; } if (j < k) j += k; } } void fft(plex y[],int len,int on) { change(y,len); for(int h = 2; h <= len; h <<= 1) { plex wn(cos(-on*2*pi/h),sin(-on*2*pi/h)); ///根据欧拉公式求wn for(int j = 0;j < len;j+=h) { plex w(1,0); for(int k = j;k < j+h/2;k++) { plex u = y[k]; plex t = w*y[k+h/2]; y[k] = u+t; y[k+h/2] = u-t; w = w*wn; } } } if(on == -1) ///看是dft还是idft for(int i = 0;i < len;i++) y[i].x /= len; }
首先定义两个系数向量x1,x2 eg x1[i]=plex(s1[l1-i-1]-'0',0);
对这两个系数向量做fft fft三个参数是向量名字,长度,是dft还是idft
相关文章推荐
- 快速傅立叶变换FFT模板
- FFT模板
- 【LuoguP3803】多项式乘法-FFT/NTT模板题(附带FFT/NTT简单介绍)
- FFT模板
- 基于FFT的模板匹配
- BZOJ 2179 FFT模板
- 模板,FFT 快速傅里叶变化
- hdu 1402 A * B Problem Plus FFT模板
- HDU 1402 A * B Problem Plus (FFT模板题)
- 洛谷P4245:【模板】MTT (拆系数+FFT)
- [FFT 模板题] HDU 1402:A*B Problem Plus
- HDU 1402 A*B(FFT 模板题)
- 洛谷P3803 【模板】多项式乘法(FFT)
- BZOJ 2179 FFT模板
- 高精度乘法FFT 模板
- 对FFT的理解&&FFT模板
- 洛谷P1919 【模板】A*B Problem升级版(FFT快速傅里叶)
- 模板:快速傅里叶变换(FFT)
- FFT模板
- FFT 模板(hdu 1402)