快速数论变换学习笔记
参考:知乎专栏·桃酱的算法笔记
Idea
只需将 $\textbf{FFT}$ 与 $\textbf{NTT}$ 之间建立起映射关系即可。
$\textbf{FFT}$ 的关键在于单位复数根 $\omega$,它定义为 $\omega^n=1$,其中主 $n$ 次复数根定义为 $\omega_n=e^{2\pi i/n}$,满足消去、折半、求和引理。
那么在模 $p$ 意义下,考虑 $p$ 的原根 $g$,与 $\omega_n$ 对应的便是 $g^{\frac{p-1}{n}}$,满足 $\left(g^{\frac{p-1}{n}}\right)^n\equiv g^{p-1}\equiv1\pmod p$,当然这里要求 $n$ 是 $p-1$ 的因子。下面证明 $g^{\frac{p-1}{n}}$ 也满足消去、折半、求和引理:
- 消去引理:$\left(g^{\frac{p-1}{dn}}\right)^{dk}=\left(g^{\frac{p-1}{n}}\right)^k$,证明显然;
- 折半引理:$\left(g^{\frac{p-1}{n}}\right)^2=g^{\frac{p-1}{n/2}}$,证明显然;
- 求和引理:$\sum\limits_{j=0}^{n-1}\left(g^{\frac{p-1}{n}}\right)^{kj}\equiv\frac{\left(g^{\frac{p-1}{n}}\right)^{kn}-1}{\left(g^{\frac{p-1}{n}}\right)^k-1}\equiv\frac{g^{(p-1)k}-1}{g^{(p-1)k/n}-1}\equiv0\pmod p$,证明显然。
于是乎,关于 $\textbf{FFT}$ 的一切也成立于 $\textbf{NTT}$,只需将 $\omega_n$ 换成 $g^{\frac{p-1}{n}}$ 即可。
由于 $n$ 是 $2$ 的幂次,又是 $p-1$ 的因子,所以 $p$ 是形如 $c\cdot2^k+1$ 形式的素数,常用:
$p$ | $g$ | $\text{inv}(g)$ | $n$ 的上界 |
---|---|---|---|
$998244353$ | $3$ | $332748118$ | $n\leqslant2^{23}=8388608$ |
$1004535809$ | $3$ | $334845270$ | $n\leqslant 2^{21}=2097152$ |
$469762049$ | $3$ | $156587350$ | $n\leqslant 2^{26}=67108864$ |
Code
1 | const LL MOD = 998244353; |