codeforces1054H. Epic Convolution
分析
直接处理不好处理,考虑转化。
难搞的是 c i 2 j 3 c^{i^2j^3} ci2j3
根据费马小定理,可以让 i 2 j 3 m o d    490018 i^2j^3\mod 490018 i2j3mod490018
发现模数较小,一个基本的思路是,考虑求 ∑ i , j a i b j [ i 2 j 3 ≡ k m o d    490018 ] \sum_{i,j}a_ib_j[i^2j^3\equiv k \mod 490018] ∑i,jaibj[i2j3≡kmod490018]。
乘法不好搞,考虑用原根把乘法转化成加法。
我们假设模数是质数 P P P,原根是 w w w,设 i = w x , j = w y , k = w z i=w^x,j=w^y,k=w^z i=wx,j=wy,k=wz
那么问题转化成
∑ i , j a i b j [ 2 x + 3 y ≡ z m o d    P − 1 ] \sum_{i,j}a_ib_j[2x+3y\equiv z \mod P-1] ∑i,jaibj[2x+3y≡zmodP−1]
只需要将所有的 a i a_i ai映射到 a 2 x a_{2x} a2x,所有的 b j b_j bj映射到 b 3 y b_{3y} b3y上就可以用 F F T FFT FFT解决了。
不是质数直接搞肯定不成,于是考虑分解一下模数然后用 C R T CRT CRT合并
490018 = 2 ⋅ 491 ⋅ 499 490018=2\cdot491\cdot499 490018=2⋅491⋅499
模数很给力,刚好仨质数。
将一个数 i i i分解成 ( i m o d    2 , i m o d    491 , i m o d    499 ) (i\mod 2, i \mod 491, i \mod 499) (imod2,imod491,imod499)
m o d    2 \mod 2 mod2这个玩意儿不用太在意,考虑分奇偶性。奇数的答案一定是奇数卷奇数得到的,偶数的答案用全部的答案减去奇数的答案就好了。
于是每个数 i i i按奇数和偶数分类后转化成二元组 ( i m o d    491 , i m o d    499