从理论上说,经过人们优化的FFT已经十分优秀,能够处理大部分的多项式乘法,但是有的时候仍然会出现下面的情况:
1)常数仍然比较大
2)在进行与整数有关的FFT时,发现得到的结果是一堆诡异的数,你需要不停的和精度搏斗
那么在这时,你就需要学会快速数论变换(NTT)
前置芝士
快速傅里叶变换
你可以上网百度,或者看我的博客
阶与原根
我们由欧拉定理可以知道,对于任意的正整数\(a、m\),如果满足\(gcd(a,m)=1\),就有\(a^{\varphi(m)}\equiv 1(mod\ m)\)
但我们发现,还有一些数满足\(a^p\equiv 1(mod\ m)\)且\(p< \varphi(m)\),因此人们定义了阶
设\(m>1\),且\(gcd(a,m)=1\),则满足\(a^p\equiv 1(mod\ m)\)的最小正整数\(p\)成为\(a\)对

本文介绍了快速数论变换(NTT)的背景,当快速傅里叶变换(FFT)无法满足需求时,NTT作为替代方案的重要性。文章详细讲解了阶与原根的概念,原根的性质,并探讨了NTT在实际运用中的一点注意事项,如模数的选择和逆元的计算。最后提到了代码实现的相关内容。
最低0.47元/天 解锁文章
1122

被折叠的 条评论
为什么被折叠?



