FFT-trick计算多项式环乘法
定理:
Zq/(a(x)⋅b(x))≅Zq/(a(x))×Zq/(b(x))\mathbb{Z}_{q}/(a(x) \cdot b(x)) \cong \mathbb{Z}_{q}/(a(x))× \mathbb{Z}_{q}/(b(x))Zq/(a(x)⋅b(x))≅Zq/(a(x))×Zq/(b(x)),其中a(x),b(x)a(x),b(x)a(x),b(x)互素
ϕ:f(x)→(f(x) mod a(x),f(x) mod b(x))\phi: f(x) \to (f(x) \ mod \ a(x), f(x) \ mod \ b(x))ϕ:f(x)→(f(x) mod a(x),f(x) mod b(x))
- Zq[x]/(xn+1)=Zq[x]/(xn−ωn)≅Zq[x]/(xn2−ωn2)×Zq[x]/(xn2+ωn2)\quad \mathbb{Z}_{q}[x]/(x^{n}+1)=\mathbb{Z}_{q}[x]/(x^{n}-\omega^{n}) \cong \mathbb{Z}_{q}[x]/(x^{\frac{n} {2}}-\omega^{\frac{n} {2}})×\mathbb{Z}_{q}[x]/(x^{\frac{n} {2}}+\omega^{\frac{n} {2}})Zq[x]/(xn+1)=Zq[x]/(xn−ωn)≅Zq[x]/(x2n−ω2n)×Zq[x]/(x2n+ω2n)
- f=∑i=0n−1fixi→(fmod(xn2−ωn2),fmod(xn2+ωn2))\quad f=\sum_{i=0}^{n-1} f_{i}x^{i}\to (f mod(x^{\frac{n} {2}}-\omega^{\frac{n} {2}}),f mod (x^{\frac{n} {2}}+\omega^{\frac{n} {2}}))f=∑i=0n−1fixi→(fmod(x2n−ω2n),fmod(x2n+ω2n))
当n=4n=4n=4的时候则可以得到以下分解

快速数论变换NTT的结果都可以以这种方式计算出做完NTT变换后的每项系数,也就是对应这个二叉树叶节点的值(都为常数)。其实求每个分支的值的方法也非常简单。例如我们要求第二层也就是根节点的左右儿子的值,左边:只需要将x2=ω2x^{2}=\omega^{2}x2=ω2带入根节点的式子中即可得左儿子的值。
这里解释一下为什么根节点的右儿子可以分解成Zq[x]/(x−ω3)\mathbf{Z}_{q}[x] /\left(x-\omega^{3}\right)Zq[x]/(x−ω3)和Zq[x]/(x+ω3)\mathbf{Z}_{q}[x] /\left(x+\omega^{3}\right)Zq[x]/(x+ω3)的形式,是因为这里ω\omegaω是模

本文详细介绍了快速傅里叶变换(FFT)在计算多项式环乘法中的应用,通过定理阐述了Zq/(a(x)⋅b(x))与Zq/(a(x))×Zq/(b(x))的等价性,并展示了如何使用FFT-trick进行多项式环的分解。内容包括Cooley-Tukey和Gentleman-Sande蝴蝶变换,以及它们在减少乘法运算中的作用。此外,还讨论了在NTT过程中优化乘法运算的Barrett约减和Montgomery约减算法。
最低0.47元/天 解锁文章
2万+

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



