0%

CF1054H Epic Convolution

最近突然想做多项式了,就找了些题,这道题用的 2D-FFT 的科技我还不会

首先和式的 \(i\)\(j\) 除了出现在下标上,就是出现在指数上,并且 \(490019\) 是一个质数 \(\varphi(490019)=490018=2\times491\times499\) 我们就可以想到按照 \(i^2j^3\) 模这些数的值的余数来计算,即答案为 \[ \sum_x\sum_y\sum_zc^{[x,y,z]}\sum_{i=0}^{n-1}\sum_{j=0}^{n-1}A_iB_j[i^2j^2\operatorname{mod}491=x][i^2j^2\operatorname{mod}499=y][i^2j^2\operatorname{mod}2=z] \]

其中 \([x,y,z]\) 为中国剩余定理的合并

并且我们知道通过离散对数可以很容易把乘变成加,其中 \(2\) 的原根为 \(1\)\(491\) 的原根为 \(2\)\(499\) 的原根为 \(7\)\(2\) 其实也可以不搞原根,直接暴力,那么考虑我们最后需要求出的二元函数 \(f_i(x,y)\)\(g_i(x,y)\)\(h_i(x,y)\) 实际上表示为

\[ [x^ny^m]f_t=\sum_{i^2\operatorname{mod}2=t,\operatorname{ind}_2^{491}i^2=n,\operatorname{ind}_7^{499}i^2=m}A_i \]

\[ [x^ny^m]g_t=\sum_{i^2\operatorname{mod}2=t,\operatorname{ind}_2^{491}i^3=n,\operatorname{ind}_7^{499}i^3=m}B_i \]

\[ [x^ny^m]h_t=\sum_{a\And b=t}[x^ny^m]{(f_a\times g_b)} \]

而后面的 \(f_a\)\(g_b\) 为二维卷积,需要用 2D-FFT 优化

其中,2D-FFT 的公式通过如下给出,首先是 DFT

\[ y_{i,j}=\sum_{k=0}^{n-1}\sum_{l=0}^{m-1}a_{k,l}\omega_n^{ik}\omega_n^{jl} \]

而加入我们定列 DFT

\[ z_{i,l}=\sum_{k=0}^{n-1}a_{k,l}\omega_n^{ik} \]

很显然

\[ y_{i,j}=\sum_{l=0}^{m-1}\omega_n^{jl}z_{i,l} \]

综上,2D-DFT 即为先做列 DFT 在做行 DFT,颠倒也可以,那么 IDFT 同理

最后需要考虑有一些不存在离散对数的情况,那么这些为 \(491\)\(499\) 的倍数,需要单独抽出来考虑,我们认为 \(n,m\) 同阶的话复杂度有 \(\operatorname{O}(p\log p+\frac{n^2}{\sqrt p})\) 需要轻微卡常