[模板]快速数论变换(NTT)

本文介绍了快速数论变换(NTT)的概念,作为FFT的优化,NTT通过取模运算和原根来替代复数运算,减少了计算量和精度误差。文章讨论了原根的定义、性质,并提供了将单位根转换为原根的方法。通过代码示例和复杂度对比,展示了NTT在处理整数系数多项式时的优势。
摘要由CSDN通过智能技术生成

铺垫

先要把FFT学习清楚才能进行.
因为基本原理都是一样的.

快速数论变换

FFT是根据复数和 n n n次单位根构造算法的.
但是,使用复数和单位根有以下两个缺点:

  1. 复数运算计算量大,常数比较高
  2. 复数是基于 d o u b l e double double运算的,可能会出现精度误差

这两个缺点都很致命.
但是,我们经常接触系数为整数的多项式.
有没有更简单的优化算法?
答案是:有!就是快速数论变换(Number Theoretic Transform)(NTT).
快速数论变换,以取模代替了复数运算.
既然没有了复数这一尚方宝剑,那么用什么代替复数指数?
用幂次方!
于是,NTT优秀脱颖而出.

定义

其实很巧,NTT并没有非常严格的数学论证.
只是在寻找这样的数而已.

(1)
阶:
如果有 a , p a,p a,p互质,那么如果
a n ≡ 1 ( m o d p ) a^n\equiv1\pmod p an1(modp)
称满足条件的最小正整数 n n na模p的阶,又称 δ p ( a ) \delta_p(a) δp(a)(读作delta).
(2)
原根:
如果 p p p是正整数, a a a是整数,若:
δ p ( a ) = φ ( p ) \delta_p(a)=\varphi(p) δp(a)=

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值