NTT任意模数的方法其实有点取巧。
两个数列每个有n个数,每个数的大小最多是10^9。
如果没有模数,那么卷积过后每个位置的答案一定小于10^9*10^9*n,差不多是10^24左右
那么就有一个神奇的做法,选3个乘积大于10^24的NTT模数,分别做一次,得到每个位上模意义下的答案,
然后用中国剩余定理得到模上三个质数乘积的答案。
因为答案显然小于三个质数乘积,那么模上三个质数乘积的答案就是这个数应该的值。
不过这个值可能会超long long(及时不超,对于乘积大于long long的三个质数做中国剩余定理也不是一件小事)
考虑先将两个模数意义下的答案合并,
现在我们还剩两个模数,一个为long long,一个为int
不能中国剩余定理硬上了。
设模数为P1(longlong) ,P2(int), 余数为a1,a2
设答案ANS=P1*K+a1=P2*Q+a2
那么K*P1=P2*Q+(a2-a1)
K*P1 % P2=a2-a1
a1-a2为常数
用同余方程的解法即可解出K模P2(int)意义下的值
又有ANS<P1*P2(之前已证)
so K*P1+a1<P1*P2
显然K<P2
所以原本答案K的值只能为模P2意义下的值
所以我们就求出K了,然后可以不用高精度就算出ANS%MOD(MOD为任意模数)
但是,
回顾整个过程,附加条件非常多。。。。。。
首先每个数<=10^9(再大或许可以通过增加模数的方法解决,但是CRT时可就不能回避高精度取模了&#x