CF1054H Epic Convolution 发表于 2020-02-24 更新于 2020-10-13 分类于 题解 , 模板 阅读次数: Valine: 最近突然想做多项式了,就找了些题,这道题用的 2D-FFT 的科技我还不会 首先和式的 i 和 j 除了出现在下标上,就是出现在指数上,并且 490019 是一个质数 φ(490019)=490018=2×491×499 我们就可以想到按照 i2j3 模这些数的值的余数来计算,即答案为 ∑x∑y∑zc[x,y,z]∑i=0n−1∑j=0n−1AiBj[i2j2mod491=x][i2j2mod499=y][i2j2mod2=z] 其中 [x,y,z] 为中国剩余定理的合并 并且我们知道通过离散对数可以很容易把乘变成加,其中 2 的原根为 1,491 的原根为 2,499 的原根为 7,2 其实也可以不搞原根,直接暴力,那么考虑我们最后需要求出的二元函数 fi(x,y), gi(x,y),hi(x,y) 实际上表示为 [xnym]ft=∑i2mod2=t,ind2491i2=n,ind7499i2=mAi [xnym]gt=∑i2mod2=t,ind2491i3=n,ind7499i3=mBi [xnym]ht=∑a&b=t[xnym](fa×gb) 而后面的 fa 与 gb 为二维卷积,需要用 2D-FFT 优化 其中,2D-FFT 的公式通过如下给出,首先是 DFT yi,j=∑k=0n−1∑l=0m−1ak,lωnikωnjl 而加入我们定列 DFT 为 zi,l=∑k=0n−1ak,lωnik 很显然 yi,j=∑l=0m−1ωnjlzi,l 综上,2D-DFT 即为先做列 DFT 在做行 DFT,颠倒也可以,那么 IDFT 同理 最后需要考虑有一些不存在离散对数的情况,那么这些为 491 或 499 的倍数,需要单独抽出来考虑,我们认为 n,m 同阶的话复杂度有 O(plogp+n2p) 需要轻微卡常
v1.5.2