是lzh學長講過以後,又看了小迪的部落格,才學會的fft
小迪這個部落格太推薦了,一學就會
#include#include#include
#include
#include
#define maxn 4000010
#define pi (acos(-1.0))
using
namespace
std;
complex
a[maxn],b[maxn];
intid[maxn];
void fft(complex *p,int n,int
f) }
}if(f==-1
)
for(int i=0;idouble
)n;}
intmain()
for(int i=0;i<=m;i++)
m=n+m;n=1
;
int l=0
;
while(n<=m)n<<=1,l++;
for(int i=0;i<=n;i++)id[i]=(id[i>>1]>>1)|((i&1)<<(l-1
)); fft(a,n,
1);fft(b,n,1
);
for(int i=0;i<=n;i++)a[i]=a[i]*b[i];
fft(a,n,-1
);
for(int i=0;i<=m;i++)
printf(
"%d
",(int)(a[i].real()+0.5
));
return0;
}
題意:求兩個長度為50000位的大整數的乘積
解:fft之後進製,並特判為0的情況
注意fft計算時一定要用double型別,結果四捨五入取整數
#include#include#include
#include
#include
#define maxn 400010
#define pi (acos(-1.0))
using
namespace
std;
complex
a[maxn],b[maxn];
char
s1[maxn],s2[maxn];
intid[maxn],ans[maxn];
void fft(complex *p,int n,int
f) }
}if(f==-1
)
for(int i=0;idouble
)n;}
intmain()
for(int i=0;i)
m=n+m;n=1
;
int l=0
;
while(n<=m)n<<=1,l++;
for(int i=0;i<=n;i++)id[i]=(id[i>>1]>>1)|((i&1)<<(l-1
)); fft(a,n,
1);fft(b,n,1
);
for(int i=0;i<=n;i++)a[i]=a[i]*b[i];
fft(a,n,-1
);
for(int i=0;i1;i++)ans[i]=(int)(a[i].real()+0.5
);
for(int i=m-2;i>0;i--)
}bool flag=0
;
for(int i=0;i1;i++)
if(!flag)printf("0"
); puts(
"");
} return0;
}
oj資料出問題了,我也不知道**能不能過
具體思路見這個部落格:
#include#include#include
#include
#include
#define pi (acos(-1.0))
#define maxn 400010
using
namespace
std;
double
q[maxn];
complex
f[maxn],g[maxn],h[maxn];
intid[maxn],n;
void fft(complex *p,int n,int
f) }
}if(f==-1
)
for(int i=0;idouble
)n;}
intmain()
for(int i=1;i)
int l=0,n=1,m=(n-1)*2
;
while(n<=m)n<<=1,l++;
for(int i=0;i>1]>>1)|((i&1)<<(l-1
)); fft(f,n,
1);fft(g,n,1);fft(h,n,1
);
for(int i=0;ig[i];
for(int i=0;ig[i];
fft(f,n,-1);fft(h,n,-1
);
for(int i=0;i)
return0;
}
快速傅利葉變換FFT
fft的作用就不多說了,搞訊號處理的人都會用上。fft的由來 傅利葉變換ft 離散傅利葉變換dft 快速傅利葉變換fft。學習資料 1 陳後金的 數字訊號處理 裡面深入淺出,該有的公式都有,程式設計思想也有。2 一篇系統講述傅利葉變換的帖子 3 學生對fft的理解 4 工程人員對fft的簡單明瞭的總...
快速傅利葉變換 FFT
bzoj 2179 fft快速傅利葉 果題 bzoj2194 請計算c k sigma a i b i k 其中 k i n 並且有 n 10 5。a,b中的元素均為小於等於100的非負整數。注意到i 和 i k有奇妙的聯絡 不妨嘗試把b翻轉 然後就變成卷積了。貼個模板 include define...
快速傅利葉變換 FFT
首先說一下我用fft做什麼,我要做的是多項式乘法,或者說,加速多項式乘法。考慮多項式a x j 0n 1aj xj,它一共有 n 項,我們稱它的次數界為 n。假設我們有兩個次數界為 n 的多項式a x 和b x 要求它們的和是非常簡單的,只需要將對應的係數相加,複雜度為o n 如果要求他們的積,則需...