0%

CF1054H Epic Convolution

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

首先和式的 ij 除了出现在下标上,就是出现在指数上,并且 490019 是一个质数 φ(490019)=490018=2×491×499 我们就可以想到按照 i2j3 模这些数的值的余数来计算,即答案为 xyzc[x,y,z]i=0n1j=0n1AiBj[i2j2mod491=x][i2j2mod499=y][i2j2mod2=z]

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

并且我们知道通过离散对数可以很容易把乘变成加,其中 2 的原根为 1491 的原根为 2499 的原根为 72 其实也可以不搞原根,直接暴力,那么考虑我们最后需要求出的二元函数 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)

而后面的 fagb 为二维卷积,需要用 2D-FFT 优化

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

yi,j=k=0n1l=0m1ak,lωnikωnjl

而加入我们定列 DFT

zi,l=k=0n1ak,lωnik

很显然

yi,j=l=0m1ωnjlzi,l

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

最后需要考虑有一些不存在离散对数的情况,那么这些为 491499 的倍数,需要单独抽出来考虑,我们认为 n,m 同阶的话复杂度有 O(plogp+n2p) 需要轻微卡常

Powered By Valine
v1.5.2