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 应该也是一样的,就不写了 .
图

以下是博客签名,正文无关
本文来自博客园,作者:yspm,转载请注明原文链接:https://www.cnblogs.com/CDOI-24374/p/19069417
版权声明:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议(CC BY-NC-SA 4.0)进行许可。看完如果觉得有用请点个赞吧 QwQ

浙公网安备 33010602011771号