洛谷 - P4245 模板任意模数多项式乘法(三模NTT+中国剩余定理/五次FFT的MTT)
Posted Frozen_Guardian
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了洛谷 - P4245 模板任意模数多项式乘法(三模NTT+中国剩余定理/五次FFT的MTT)相关的知识,希望对你有一定的参考价值。
题目链接:点击查看
题目大意:给出一个长度为 n n n 的多项式 F ( x ) F(x) F(x) 和一个长度为 m m m 的多项式 G ( x ) G(x) G(x),求 F ( x ) ∗ G ( x ) F(x)*G(x) F(x)∗G(x),模数任意,值域 1 e 9 1e9 1e9
题目分析:如果不取模的话极限情况下会达到 1 0 9 ∗ 1 0 9 ∗ 1 0 5 = 1 0 23 10^9*10^9*10^5=10^{23} 109∗109∗105=1023
众所周知,NTT 支持值域更大的多项式相乘,但是不支持任意模数。
FFT 支持任意模数,但是不支持值域很大的多项式相乘。
所以本题就针对两种做法各自进行了变形,今天先补一下针对 NTT 的做法,FFT 的后续补
NTT做法:
既然一个模数不够用,那我们直接参考哈希,将模数扩展成三个,只需要取三个模数,使其乘积大于极限情况,最后再用中国剩余定理合并就好了
注意在中国剩余定理时会爆 l o n g l o n g long\\ long long long ,所以可以全部定义成 i n t 128 int128 int128
FTT做法:
考虑设置一个阈值 w = 2 15 w=2^{15} w=215,那么每个数都可以拆成 x = a ∗ w + b x=a*w+b x=a∗w+b 的形式,类似的,将多项式也拆成这种形式。设初始的多项式为 A ( x ) A(x) A(x) 和 B ( x ) B(x) B(x),我们拆成 A ( x ) = A 1 ( x ) ∗ w + A 2 ( x ) A(x)=A_1(x)*w+A2(x) A(x)=A1(x)∗w+A2(x) B ( x ) = B 1 ( x ) ∗ w + B 2 ( x ) B(x)=B_1(x)*w+B_2(x) B(x)=B1(x)∗w+B2(x)
那么 A ( x ) B ( x ) = A 1 ( x ) B 1 ( x ) w 2 + A 1 ( x ) B 2 ( x ) w + A 2 ( x ) B 1 ( x ) w + A 2 ( x ) B 2 ( x ) A(x)B(x)=A_1(x)B_1(x)w^2+A_1(x)B_2(x)w+A_2(x)B_1(x)w+A_2(x)B_2(x) A(x)B(x)=A1(x)B1(x)w2+A1(x)B2(x)w+A2(x)B1(x)w+A2(x)B2(x)
这样一来每一项的乘积的上限是 2 15 ∗ 2 15 ∗ n = 1 0 14 2^{15}*2^{15}*n=10^{14} 215∗215∗n=1014,满足了 F F T FFT FFT 的值域范围,也就可以进行求解了,这种设置阈值的方法称为 M T T MTT MTT,不过这种做法需要进行四次插值,点乘后还需要四次插值进行还原,共八次FFT,常数过于太大,下面考虑优化
在复数域中,设 P ( x ) = A 1 ( x ) + A 2 ( x ) i P(x)=A_1(x)+A_2(x)i P(x)=A1(x)+A2(x)i P ′ ( x ) = A 1 ( x ) − A 2 ( x ) i P'(x)=A_1(x)-A_2(x)i P′(x)=A1(x)−A2(x)i Q ( x ) = B 1 ( x ) + B 2 ( x ) i Q(x)=B_1(x)+B_2(x)i Q(x)=B1(x)+B2(x)i
那么有 T 1 ( x ) = P ( x ) Q ( x ) = A 1 ( x ) B 1 ( x ) − A 2 ( x ) B 2 ( x ) + ( A 1 ( x ) B 2 ( x ) + A 2 ( x ) B 1 ( x ) ) i T_1(x)=P(x)Q(x)=A_1(x)B_1(x)-A_2(x)B_2(x)+(A_1(x)B_2(x)+A_2(x)B_1(x))i T1(x)=P(x)Q(x)=A1(x)B1(x)−A2(x)B2(x)+(A1(x)B2(x)+A2(x)B1(x))i T 2 ( x ) = P ′ ( x ) Q ( x ) = A 1 ( x ) B 1 ( x ) + A 2 ( x ) B 2 ( x ) + ( A 1 ( x ) B 2 ( x ) − A 2 ( x ) B 1 ( x ) ) i T_2(x)=P'(x)Q(x)=A_1(x)B_1(x)+A_2(x)B_2(x)+(A_1(x)B_2(x)-A_2(x)B_1(x))i T2(x)=P′(x)Q(x)=A1(x)B1(x)+A2(x)B2(x)+(A1(x)B2(x)−A2(x)B1(x))i
然后将
T
1
(
x
)
T_1(x)
T1(x) 和
T
2
以上是关于洛谷 - P4245 模板任意模数多项式乘法(三模NTT+中国剩余定理/五次FFT的MTT)的主要内容,如果未能解决你的问题,请参考以下文章