fft卡常研究

// 1. 注意加减乘除写在struct里 且 加上&
// 2. w预处理不一定好,反而麻烦,我们只要连续
// 3. reverse可以代替-w
// 4. 注意rev的预处理,这个还是有点用的

#include <bits/stdc++.h>

#define I register int
#define F(i, a, b) for (I i = a; i <= b; i ++)

typedef double db;
const db pi = acos(- 1);

using namespace std;

int n, nn, Len, rev[M];

struct Z {
	db x, y;
	Z operator * (Z &a) { return Z{x * a.x - y * a.y, x * a.y + y * a.x}; }
	Z operator + (Z &a) { return Z{x + a.x, y + a.y}; }
	Z operator - (Z &a) { return Z{x - a.x, y - a.y}; }
} A[M], B[M];

void Dft(Z *A, I sig) {
	F(i, 1, Len - 1)
		if (i < rev[i]) swap(A[i], A[rev[i]]);
	for (I m = 2; m <= Len; m <<= 1) {
		Z w = Z{cos(2 * pi / m), sin(2 * pi / m)};
		I half = m >> 1;
		for (I i = 0; i < Len; i += m) {
			Z o = Z{1, 0};
			for (I j = i; j < i + half; j ++, o = o * w) {
				Z u = A[j + half] * o;
				A[j + half] = A[j] - u;
				A[j] = A[j] + u;
			}
		}
	}
	if (sig == - 1) {
		reverse(A + 1, A + Len);
		F(i, 0, Len - 1)
			A[i].x = int(A[i].x / Len + 0.5);
	}
}

int main() {
// Do sth..
// nn is the length of A,B
	for (Len = 1, cnt = 0; Len <= nn * 2; Len <<= 1, cnt ++);

	F(i, 1, Len - 1)
		rev[i] = (rev[i >> 1] >> 1) ^ (i & 1) * (Len >> 1);
	Dft(A, 1), Dft(B, 1);
	F(i, 0, Len - 1) A[i] = A[i] * B[i];
	Dft(A, - 1);
}
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看REAdMe.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看REAdMe.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看READme.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值