我们学过了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,n−1] 且 i,j∈Z,i≠j , ωin≠ωjn ; 3、(折半引理) (ωkn)2=ωkn2 , ωk+n2n=−ωkn ; 4、(求和引理) ∑j=0n−1(ωkn)j=0 (k≠0) 。 所以,我们需要在整数范围内找到一个符合这四条性质的一种数。于是我们找到了一种特殊的数——原根。 网上并没有统一的原根的定义,维基百科看不懂(我太弱了……),介绍一下性质。 1、对于一个质数 P ,如果存在原根 g ,则 gi≠gj (modP ) 。其中 i≠j 。 别问我怎么证,有的讲稿是用它定义原根的…… 有些证明用到了反证法(但是我觉得有点问题……) 了解就行。 于是这就符合了第二条。 然后,我们用 gφ(P)n 代替 n 次单位根进行计算,由 φ(P)=P−1 ,要求 φ(P)n 为整数, n 还是 2 的整数次幂,所以要求 P=k∗2q+1 ,其中 2q≥n 。 然后大力推式子,会发现所有的性质都符合…… 如果模数任意呢? 如果要模数是 P ,那么多项式的所有系数和不会超过 n(P−1)2 。所以找出一组 p ,使得 pi=ki∗2qi+1 ,且: