NTT

质数模数 NTT

  • 普通 FFT 有一个很大缺点就是精度和随带的速度

  • 因为一直是在复数域,大量的 double 运算,精度的损失太大了,所以出现了 NTT (快速数论变换)

  • NTT 的思想和 FFT 的思想是一样的,只是将原根换成了一个替代品\(\to\)关于模数的原根

  • 倒数的地方就是原根关于模数的逆元

  • P3803 【模板】多项式乘法(FFT)

  • 参考代码

任意模数 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\) 的过程中就可以对原题目要求的质数取模了

  • 参考代码

posted @ 2022-06-04 11:15  Kzos_017  阅读(96)  评论(0编辑  收藏  举报