NTT
质数模数 NTT
-
普通 FFT 有一个很大缺点就是精度和随带的速度
-
因为一直是在复数域,大量的 double 运算,精度的损失太大了,所以出现了 NTT (快速数论变换)
-
NTT 的思想和 FFT 的思想是一样的,只是将原根换成了一个替代品\(\to\)关于模数的原根
-
倒数的地方就是原根关于模数的逆元
任意模数 NTT
-
以 P4245 【模板】任意模数多项式乘法 为例
-
最大值不超过 \(p^2\times \max(n,m)\leq 10^{23}\) ,那么拿三个模数来做就差不多了
-
我们拿三个模数,每个都做一边 NTT ,那么最后对于每一项就可以用 excrt 来解
-
要注意的是 excrt 不能直接用,因为模数的 lcm 会爆,这个时候需要手推式子
-
比如 \(x\equiv b_1\pmod {a_1}\) ,那么 \(x=a_1x+b_1\) ,将这个带入下一个式子的左边,迭代下去即可
-
最终会得到 \(Ans\equiv X \pmod {a_1a_2...}\) ,因为 \(Ans<a_1a_2...\) ,所以 \(Ans=X\) ,那么求 \(X\) 的过程中就可以对原题目要求的质数取模了