首页 > 其他分享 >【模板】快速傅里叶变换

【模板】快速傅里叶变换

时间:2022-10-15 19:34:38浏览次数:48  
标签:ch val 变换 max rev int save 傅里叶 模板

还是一份常数很大的板子,我再卡一卡罢。

#include <iostream>
#include <complex>
#include <cmath>
const int N = 1100010;
const double pi = 3.14159265358979323846;
std :: complex<double> a[N];
int n, m, max_bit, max_val;
int rev[N];
double sin_save[N], cos_save[N];
void fft_init() {
	for(int i = 0;i < max_val;++i) 
		rev[i] = (rev[i>>1]>>1)|((i&1)<<(max_bit-1));
	for(int i = 1;i < max_val;i <<= 1) {
		sin_save[i] = sin(pi/i);
		cos_save[i] = cos(pi/i);
	}
}
void FFT(std :: complex<double> *f,const int opt) {
	for(int i = 0;i < max_val;++i) 
		if(i < rev[i]) 
			std :: swap(f[i],f[rev[i]]);
	for(int p_1 = 1, p_2 = 2;p_1 < max_val;p_1 <<= 1, p_2 <<= 1) {
		std :: complex<double> w_n(cos_save[p_1],opt*sin_save[p_1]);
		for(int j = 0;j < max_val;j += p_2) {
			std :: complex<double> w(1,0);
			for(int k = j;k < j+p_1;++k, w *= w_n) {
				std :: complex<double> x(w*f[k+p_1]);
				f[k+p_1] = f[k]-x;
				f[k] += x;
			}
		}
	}
}
char ch_in;
short get_single() {
	ch_in = getchar();
	while(ch_in < '0') 
		ch_in = getchar();
	return ch_in&15;
}
int main() {
	scanf("%d %d",&n,&m);
	for(int i = 0;i <= n;++i) 
		a[i].real(get_single());
	for(int i = 0;i <= m;++i) 
		a[i].imag(get_single());
	max_val = 1<<(max_bit = 31-__builtin_clz(n+m));
	if((n+m)&max_val) {
		max_val <<= 1;
		++max_bit;
	}
	fft_init();
	FFT(a,1);
	for(int i = 0;i < max_val;++i) 
		a[i] *= a[i];
	FFT(a,-1);
	for(int i = 0;i <= n+m;++i) 
		printf("%d ",(int)(a[i].imag()/(max_val<<1)+0.5));
	return 0;
}

标签:ch,val,变换,max,rev,int,save,傅里叶,模板
From: https://www.cnblogs.com/bikuhiku/p/Fast_Fourier_Transform.html

相关文章

  • 【图像压缩】基于蚁群算法优化小波变换实现图像压缩附matlab代码
    ✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。......
  • 整数二分查找模板与理解---acWing
    模板//区间[l,r]被划分成[l,mid]和[mid+1,r]时使用:intbsearch_1(intl,intr){-[]while(l<r){intmid=l+r>>1;if(c......
  • Demo:下载模板 02 使用SAP_CONVERT_TO_XLS_FORMAT
    货铺QQ群号:834508274进群统一修改群名片,例如BJ_ABAP_森林木。群内禁止发广告及其他一切无关链接,小程序等,进群看公告,谢谢配合不修改昵称会被不定期踢除,谢谢配合有批导需求的......
  • Demo:下载模板01 SMW0
    货铺QQ群号:834508274进群统一修改群名片,例如BJ_ABAP_森林木。群内禁止发广告及其他一切无关链接,小程序等,进群看公告,谢谢配合不修改昵称会被不定期踢除,谢谢配合有批导需求的......
  • 使用Pattern调用自建的模板
    货铺QQ群号:834508274进群统一修改群名片,例如BJ_ABAP_森林木。群内禁止发广告及其他一切无关链接,小程序等,进群看公告,谢谢配合不修改昵称会被不定期踢除,谢谢配合效果:上面的注......
  • 树状数组模板题
    核心应用:快速(logn)计算前缀和(本质上是快速给某个位置加上一个数)求前缀和可以是任意区间,如求L~R的区间前缀和,只需要用S[R]-S[L-1],通过简单的减法运算即可知区间和本......
  • 【模板】快速沃尔时变换
    一份优秀的题解以及一份常数很大的代码:#include<iostream>#include<cstring>namespaceFread{ constintFread_size=(1<<18); charFread_buf[Fread_size]; c......
  • 故障复盘究竟怎么做?美图SRE结合10年经验做了三大总结(附模板)
    美图崇尚的故障文化是“拥抱故障,卓越运维”,倡导的基准是No-Blame,即「不指责,重改进」。今年9月TakinTalks社区曾经分享过美图的三段式故障治理方法(美图SRE:一次线上......
  • 如何修改eclipse下的Java代码注释模板
    window-->preferences-->搜索框进行搜索Code-->Java-->CodeStyle-->CodeTemplate-->Comments-->Types点击编辑输入一下内容/***@authortiger*@d......
  • 学习梦想家CMS内容管理系统-模板的使用
    准备网站下载器网上可以自己百度搜索,我使用的这个工具就是HTTrackWebsiteCopier,通过这个工具完成一个网站的获取,主要是获取静态文件。这里需要自己去分析这个静态文件......