2018 8 3訓練日記 快速傅利葉變換

2021-08-22 04:46:34 字數 1458 閱讀 8224

#include #include #include #include #include using namespace std;

const double pi = acos(-1.0);

// 複數結構體

struct complex

complex operator - (const complex &b) const

complex operator + (const complex &b) const

complex operator * (const complex &b) const

};// 進行fft和ifft前的反轉變換

// 位置i和(i二進位制反轉後的位置)互換

// len必須去2的冪

void change(complex y, int len)

// 交換護衛小標反轉的元素,i < j保證交換一次

// i做正常的+1,j左反轉型別的+1,始終保持i和j是反轉的

k = len / 2;

while (j >= k)

if (j < k)

}return ;

}// fft

// len必須為2 ^ k形式

// on == 1時是dft,on == -1時是idft

void fft(complex y, int len, int on)}}

if (on == -1)

}}const int maxn = 200010;

complex x1[maxn], x2[maxn];

char str1[maxn / 2], str2[maxn];

int sum[maxn];

int main(int argc, const char * argv)

for (int i = 0; i < len1; i++)

for (int i = len1; i < len; i++)

for (int i = 0; i < len2; i++)

for (int i = len2; i < len; i++)

// 求dft

fft(x1, len, 1);

fft(x2, len, 1);

for (int i = 0; i < len; i++)

fft(x1, len, -1);

for (int i = 0; i < len; i++)

for (int i = 0; i < len; i++)

len = len1 + len2 - 1;

while (sum[len] <= 0 && len > 0)

for (int i = len; i >= 0; i--)

putchar('\n');

}return 0;

}

a*b problem plus

快速傅利葉

參考 ae 97 e6 b3 95 e5 ad a6 e4 b9 a0 e7 ac 94 e8 ae b0 hdu大整數乘法 include include include include include using namespace std const double pi acos 1.0 複數...

快速傅利葉(FFT)

快速傅利葉 更加形象的理解傅利葉變換 大概了解之後 從傅利葉級數到傅利葉變換 太大,只能裁剪為兩張 刨根問底的同學 雷德演算法 輸出序列是按自然順序排列的,而輸入序列的順序則是 位元反轉 方式排列的。也就是說,將序號用二進位制表示,然後將二進位制數以相反方向排列,再以這個數作為序號。如011變成11...

FFT快速傅利葉

description 給出兩個n位10進製整數x和y,你需要計算xy。input 第一行乙個正整數n。第二行描述乙個位數為n的正整數x。第三行描述乙個位數為n的正整數y output 輸出一行,即xy的結果。資料範圍 n 60000 乙個整數x a nan 1.a 0x a na a 0 x an...