Advertisement
Malinovsky239

Untitled

May 20th, 2012
120
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.07 KB | None | 0 0
  1. #include <algorithm>
  2. #include <iostream>
  3. #include <cstdlib>
  4. #include <cstring>
  5. #include <cassert>
  6. #include <complex>
  7. #include <cstdio>
  8. #include <vector>
  9. #include <cctype>
  10. #include <string>
  11. #include <ctime>
  12. #include <cmath>
  13. #include <set>
  14. #include <map>
  15.  
  16. typedef long double LD;
  17. typedef long long LL;
  18.  
  19. using namespace std;
  20.  
  21. #define sz(A) (int)(A).size()
  22. #define mp make_pair
  23. #define pb push_back
  24.  
  25. typedef complex<double> cd;
  26. typedef vector<cd> vcd;
  27.  
  28.  
  29. vcd fft(vcd p) {
  30.     int l = sz(p);
  31.     vcd res(l);
  32.  
  33.     if (l == 1)
  34.         return vcd(1, p[0]);
  35.  
  36.     vcd A(l / 2), B(l / 2);
  37.     for (int i = 0; i < l / 2; i++)
  38.         A[i] = p[i * 2], B[i] = p[i * 2 + 1];
  39.  
  40.     vcd a_val = fft(A), b_val = fft(B);
  41.  
  42.     for (int i = 0; i < l; i++) {
  43.         double alpha = 2 * M_PI * i / l;
  44.         cd w = cd(cos(alpha), sin(alpha));
  45.         res[i] = a_val[i % (l / 2)] + b_val[i % (l / 2)] * w;      
  46.     }
  47.     return res;
  48. }
  49.  
  50. int main() {
  51.     vcd a(8);  
  52.     for (int i = 0; i < 4; i++)
  53.         a[i] = 4 - i;
  54.  
  55.     a = fft(a);
  56.     for (int i = 0; i < 8; i++)
  57.         cout << a[i].real() << " " << a[i].imag() << endl;
  58.    
  59.     return 0;
  60. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement