[NTT] 快速数论变换学习笔记

我们学过了FFT(没学过看这里),发现很滋磁。但是FFT涉及小数,有可能有精度问题,所以这就很闹心了……发现精度问题出现在DFT和IDFT中求 sin cos 导致精度问题和IDFT中乘以 1n 的精度问题,所以我们考虑能否在整数范围内实现FFT的过程。
那么整数范围内的问题需要数论解决,这就导致了NTT(也叫FNT)的诞生。
可以说,精度问题主要由 n 次单位根引起。回顾FFT,我们用了 n 次单位根,也就是 ωkn 的哪些性质?
好像也就是三个引理吧……
列出来所用的性质们:(一些条件有省略,具体请详见FFT学习笔记)
1、 ωnn=e2kπi=1
2、 i,j[0,n1] i,jZ,ij ωinωjn
3、(折半引理) (ωkn)2=ωkn2 ωk+n2n=ωkn
4、(求和引理) j=0n1(ωkn)j=0  (k0)
所以,我们需要在整数范围内找到一个符合这四条性质的一种数。于是我们找到了一种特殊的数——原根。
网上并没有统一的原根的定义,维基百科看不懂(我太弱了……),介绍一下性质。
1、对于一个质数 P ,如果存在原根 g ,则 gigj  (modP ) 。其中 ij
别问我怎么证,有的讲稿是用它定义原根的……
有些证明用到了反证法(但是我觉得有点问题……)
了解就行。
于是这就符合了第二条。
然后,我们用 gφ(P)n 代替 n 次单位根进行计算,由 φ(P)=P1 ,要求 φ(P)n 为整数, n 还是 2 的整数次幂,所以要求 P=k2q+1 ,其中 2qn
然后大力推式子,会发现所有的性质都符合……
如果模数任意呢?
如果要模数是 P ,那么多项式的所有系数和不会超过 n(P1)2 。所以找出一组 p ,使得 pi=ki2qi+1 ,且:

i=0k1pi>n(P1)2

然后按每个 p 做NTT,然后CRT合并……
又双叒叕CRT合并……
本身NTT常数就比较大,和FFT差不多吧……(中间有快速幂)。
Po姐:“此外,一个答案模一个数的计数问题必须用NTT。”
板子以后补,接着挖坑……
这里是一些常用质数的原根。

你可能感兴趣的:(NTT)