Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <algorithm>
- #include <iostream>
- #include <cstdlib>
- #include <cstring>
- #include <cassert>
- #include <complex>
- #include <cstdio>
- #include <vector>
- #include <cctype>
- #include <string>
- #include <ctime>
- #include <cmath>
- #include <set>
- #include <map>
- typedef long double LD;
- typedef long long LL;
- using namespace std;
- #define sz(A) (int)(A).size()
- #define mp make_pair
- #define pb push_back
- typedef complex<double> cd;
- typedef vector<cd> vcd;
- vcd fft(vcd p) {
- int l = sz(p);
- vcd res(l);
- if (l == 1)
- return vcd(1, p[0]);
- vcd A(l / 2), B(l / 2);
- for (int i = 0; i < l / 2; i++)
- A[i] = p[i * 2], B[i] = p[i * 2 + 1];
- vcd a_val = fft(A), b_val = fft(B);
- for (int i = 0; i < l; i++) {
- double alpha = 2 * M_PI * i / l;
- cd w = cd(cos(alpha), sin(alpha));
- res[i] = a_val[i % (l / 2)] + b_val[i % (l / 2)] * w;
- }
- return res;
- }
- int main() {
- vcd a(8);
- for (int i = 0; i < 4; i++)
- a[i] = 4 - i;
- a = fft(a);
- for (int i = 0; i < 8; i++)
- cout << a[i].real() << " " << a[i].imag() << endl;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement