洛谷 - 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} 109109105=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=aw+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} 215215n=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)的主要内容,如果未能解决你的问题,请参考以下文章

P4245 模板任意模数多项式乘法(NTT)

洛谷P4245 模板MTT(任意模数NTT)

luogu P4245 模板任意模数NTT MTT

任意模数NTT(MTT)模板

洛谷.3803.[模板]多项式乘法(FFT)

洛谷P3803 模板多项式乘法(FFT)