Advertisement
Guest User

Untitled

a guest
Nov 19th, 2019
101
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.06 KB | None | 0 0
  1. int bit_rev(int t,int n){
  2. int res=0;
  3. for (int i=0;i<n;i++) res|=(t>>(n-i-1)&1)<<i;
  4. return res;
  5. }
  6. void fft(cd *a,int n,int rev){
  7. int len=1<<n;
  8. static cd y[N*4];
  9. for (int i=0;i<len;i++) y[i]=a[bit_rev(i,n)];
  10. for (int d=1;d<len;d<<=1){
  11. cd wn=exp(cd(0,PI*rev/d));
  12. for (int k=0;k<len;k+=(d<<1)){
  13. cd w=cd(1,0);
  14. for (int i=k;i<k+d;i++,w*=wn){
  15. cd u=y[i],v=w*y[i+d];
  16. y[i]=u+v;
  17. y[i+d]=u-v;
  18. }
  19. }
  20. }
  21. if (rev==-1)
  22. for (int i=0;i<len;i++) y[i]/=len;
  23. for (int i=0;i<len;i++) a[i]=y[i];
  24. }
  25. void mul(int *a,int la,int *b,int lb,int *c,int &lc){
  26. int len=1,n=0;
  27. static cd t1[N*4],t2[N*4];
  28. for (;len<la*2 || len<lb*2;len<<=1,++n);
  29. for (int i=0;i<len;i++){
  30. t1[i]=cd(i<la ? a[i] : 0,0);
  31. t2[i]=cd(i<lb ? b[i] : 0,0);
  32. }
  33. fft(t1,n,1);
  34. fft(t2,n,1);
  35. for (int i=0;i<len;i++) t1[i]*=t2[i];
  36. fft(t1,n,-1);
  37. lc=len-1;
  38. for (int i=0;i<len;i++) c[i]=(int)(t1[i].real()+0.5);
  39. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement