题目
NTT
FFT可以帮助我们快速地将多项式从系数表达变换成点值表达。但由于涉及浮点数运算,我们需要对一些数取模时,不能一边计算一边取模,所以有可能会爆炸。而且我们有时候也会因此丢失精度,导致结果错误。所以,我们就要引入NTT算法。
NTT是利用一些特殊的模数,基于数论来进行变换的一种基于FFT的多项式算法。过程中所使用的都是整数,所以不存在这些问题。
前备知识
阶
对于 gcd ( x , n ) = 1 \gcd(x, n) = 1 gcd(x,n)=1,满足 x k ≡ 1 ( m o d m ) x^k \equiv 1 (mod \ m) xk≡1(mod m),最小的 k k k就叫做 x x x模 n n n的阶。
原根
设正整数 m m m,整数 a a a,若 a a a模 m m m的阶为 ϕ m \phi m ϕm,则称 a a a为模 m m m的一个原根。
常用原根表
质 数 原 根 \ \ 质数 \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ 原根 质数 原根
3 2 \ \ 3\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ 2 3 2
5 2 \ \ 5\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ 2 5 2
97 5 \ \ 97\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ 5 97 5
193 5 \ \ 193\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ 5 193 5
257 3 \ \ 257\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ 3 257 3
7681 17 \ \ 7681\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ 17 7681 17
12289 11 \ \ 12289\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ 11 12289 11
40961 3 \ \ 40961\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ 3 40961