NTT
将FFT中的的值改为
,对
取模即可,
为
的原根,
其中的值需要有足够大的
的幂次因子
比如
将记作
,
在
意义下与
具有相同的性质
性质如下
1.为
的原根,因此
两两不相同
2.
3.
4.
所以可以与
等价,用来快速变换
模板
void NTT(ll y[],int len,int rev)
{
change(y,len);
for(int h = 2; h <= len; h <<= 1)
{
ll wn = qmod(3, (mod - 1) / h);
for (int j = 0; j < len; j += h)
{
ll w = 1;
for (int k = j; k < j + h / 2; k++)
{
ll u = y[k];
ll t = (w * y[k + h / 2]) % mod;
y[k] = (u + t) % mod;
y[k + h / 2] = (u - t + mod) % mod;
w = (w * wn) % mod;
}
}
}
if (rev == -1)
{
reverse(y + 1, y + len);
ll inv = qmod(len, mod - 2);
for(int i = 0;i < len;i++)
(y[i] *= inv) %= mod;
}
}


京公网安备 11010502036488号