FFT-trick及Culey-Tukey蝴蝶变换原理及实现

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

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=0n1fixi(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ω是模

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值