2025.9.2 闲话

我学会了多项式乘法

教你怎么写 FFT.jpg

DIF-DIT 使用例(基于 gtm1514 的板子,自带 2 倍常数):

inline void DIF(vector<int>& v)
{
	auto iDIF = [&](int x, int y, int w){return make_pair(add(x, 1ll * y * w % mod), sub(x, 1ll * y * w % mod));};
	int n = __lg(v.size()); assert(v.size() == (1 << n));
	for (int j=n-1; j>=0; j--)
		for (int i=0; i<(1<<n); i++)
			if (i & (1 << j)) tie(v[i ^ (1 << j)], v[i]) = iDIF(v[i ^ (1 << j)], v[i], w[i / (1 << j) * (1 << j) / (2 << j)]);
}
inline void DIT(vector<int>& v)
{
	auto iDIT = [&](int x, int y, int w){return make_pair(add(x, y), 1ll * sub(x, y) * w % mod);};
	int n = __lg(v.size()); assert(v.size() == (1 << n));
	for (int j=0; j<n; j++)
		for (int i=0; i<(1<<n); i++)
			if (i & (1 << j)) tie(v[i ^ (1 << j)], v[i]) = iDIT(v[i ^ (1 << j)], v[i], w[i / (1 << j) * (1 << j) / (2 << j)]);
	int inv = qpow(1 << n, mod - 2);
	for (int i=0; i<(1<<n); i++) v[i] = 1ll * v[i] * inv % mod;
	reverse(v.begin() + 1, v.end());
}

不 DIF-DIT 应该也是一样的,就不写了 .

posted @ 2025-09-02 09:36  yspm  阅读(198)  评论(5)    收藏  举报
😅​