NTT(Number-Theoretic Transform)算法是一种基于数论的快速傅里叶变换(FFT)算法,它是离散傅里叶变换(DFT)的一种实现方式。NTT算法最初由日本学者M. Nishimura和S. Koyama在1980年提出,后来被广泛应用于数字信号处理、图像处理、密码学等领域。
NTT算法的原理是利用模意义下的乘法和加法运算,将DFT中的复数乘法转化为整数乘法,从而提高计算效率。具体来说,NTT算法使用了一个特定的模数p和一个原根g,将DFT中的每个复数都表示为模p的剩余类,并将其转化为整数。然后,通过对这些整数进行NTT变换,可以得到DFT的结果,即频域上的系数。
NTT算法的核心是蝴蝶操作,它是一种递归地将输入序列分成两部分,并对每个部分进行NTT变换的操作。在每次递归中,蝴蝶操作会将相邻的两个元素进行线性变换,并将它们合并成一个新的元素。这个过程类似于快速排序中的分治思想,可以大大减少计算量。
NTT算法的优点是计算速度快、实现简单、可并行化等,因此被广泛应用于数字信号处理、图像处理、密码学等领域。在密码学中,NTT算法被用于加速多项式乘法运算,从而提高了一些加密算法的效率,例如NTT-based polynomial multiplication (NTRU)算法和Ring-LWE算法等。