拆系数FFT(任意模数FFT)

拆系数FFT

对于任意模数 m o d mod mod
m = m o d m=\sqrt {mod} m=mod
把多项式 A ( x ) A(x) A(x) B ( x ) B(x) B(x)的系数都拆成 a × m + b a\times m+b a×m+b的形式,时 a , b a, b a,b都小于 m m m
提出,那么一个多项式就可以拆成两个多项式的加法
一个是 a ∗ m a*m am的,一个是 b b b
直接乘法分配律, a a aa aa一遍, a b ab ab一遍, b a ba ba b b bb bb一遍,四遍 F F T FFT FFT
乘出来不会超过取模范围
然后合并直接
( a × m + b ) ( c × m + d ) = a × c × m 2 + ( a × c + b × d ) m + b × d (a\times m+b)(c\times m+d)=a\times c\times m^2+(a\times c+b\times d)m+b\times d (a×m+b)(c×m+d)=a×c×m2+(a×c+b×d)m+b×d
这样子要进行 7 7 7 D F T DFT DFT

如果研究一下 m y y myy myy 2016 2016 2016 年的集训队论文就会发现有 2 2 2 次 或者 1.5 1.5 1.5 D F T DFT DFT F F T FFT FFT 算法
2次的够了吧
m y y myy myy 巧妙的运用了复数的虚部,优化了算法
具体来说


C ( x ) = A ( x ) + i B ( x ) C(x)=A(x)+iB(x) C(x)=A(x)+iB(x)
D ( x ) = A ( x ) − i B ( x ) D(x)=A(x)-iB(x) D(x)=A(x)iB(x)

假设
c ( w n k ) c(w_n^k) c(wnk) 表示将 C ( x ) C(x) C(x) D F T DFT DFT 后的点值
d ( w n k ) d(w_n^k) d(wnk) 表示将 D ( x ) D(x) D(x) D F T DFT DFT 后的点值
w w w n n n 次单位复数根
c o n j ( x ) conj(x) conj(x) 表示 x x x 的共轭复数
那么
c ( w 2 n k ) = A ( w 2 n k ) + i B ( w 2 n k ) = ∑ j = 0 2 n − 1 A j w 2 n j k

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值