FFT模板
来源:互联网 发布:dos复制文件到linux 编辑:程序博客网 时间:2024/05/18 17:01
#include<cstdio>#include<cstring>#include<algorithm>#include<cmath>using namespace std;#define N 50002#define eps 0.5const double PI = acos(-1.0);struct Complex{ double r, i; Complex(double r = 0, double i = 0) : r(r), i(i) {} Complex operator + (const Complex& t) const { return Complex(r + t.r, i + t.i); } Complex operator - (const Complex& t) const { return Complex(r - t.r, i - t.i); } Complex operator * (const Complex& t) const { return Complex(r * t.r - i * t.i, r * t.i + i * t.r); }}A[N<<2], B[N<<2];void FFT(Complex y[], int n, int rev)//rev == 1时为DFT,rev == -1时为IDFT{ for (int i = 1, j, k, t; i < n; ++i) { for (j = 0, k = n >> 1, t = i; k; k >>= 1, t >>= 1) j = j << 1 | t & 1; if (i < j) swap(y[i], y[j]); } for (int s = 2, ds = 1; s <= n; ds = s, s <<= 1) { Complex wn(cos(rev * 2 * PI / s), sin(rev * 2 * PI / s)); for (int k = 0; k < n; k += s) { Complex w(1, 0), t; for (int i = k; i < k + ds; ++i) { y[i + ds] = y[i] - (t = w * y[i + ds]); y[i] = y[i] + t; w = w * wn; } } } if (rev == -1) for (int i = 0; i < n; ++i) y[i].r /= n;}char a[N], b[N];int ans[N<<2];int main() { int len1, len2, i; while (gets(a)) { gets(b); len1 = strlen(a), len2 = strlen(b); for (i = len1-1;i >= 0;i--) { A[len1-1-i] = {(a[i]-'0')*1.0, 0}; } for (i = len2-1;i >= 0;i--) { B[len2-1-i] = {(b[i]-'0')*1.0, 0}; } int len = 1; while (len < len1+len2) len <<= 1; for (i = len1;i < len;i++) A[i] = {0,0}; for (i = len2;i < len;i++) B[i] = {0,0}; FFT(A, len, 1); FFT(B, len, 1); for (i = 0;i < len;i++) B[i] = A[i]*B[i]; FFT(B, len, -1); for (i = 0;i < len;i++) ans[i] = (int)(B[i].r+eps); for (i = 0;i < len;i++ ) { ans[i+1] += ans[i]/10; ans[i] %= 10; } for (i = len-1;i >= 0;i--) { if (ans[i] != 0) break; } if (i < 0) puts("0"); else { for (i;i >= 0;i--) printf("%d", ans[i]); puts(""); } }}
0 0
- (模板)FFT
- FFT模板
- FFT模板
- FFT模板
- FFT模板
- fft模板
- FFT模板
- FFT 模板
- FFT模板
- FFT模板
- FFT模板
- FFT模板
- 【模板】FFT
- FFT模板
- 【模板】FFT模板
- FFT乘法模板
- 高精度乘法FFT 模板
- [UOJ34]FFT && NTT 模板
- 面向对象
- UVA301Transportation
- JS+CSS 实现 悬浮滚动广告
- Git知识整理
- poj1213Fantasy of a Summation(找规律,优化代码)
- FFT模板
- 原码补码反码之间的关系
- python 设置线程名
- mongodb c++ API
- 5.4 编写一个程序,求以下矩形两条对角线上的元素之和:
- linux后台运行任务——screen
- 树莓派3B安装QT5
- coderforces 670D2 Magic Powder - 2
- 进程通信之文件映射对象