Bluestein's algorithm
任意长度dft,某些分治算法/循环卷积时有用。
[y_k = sum_{i=0}^{n-1} f(omega^k)=sum_{i=0}^{n-1}a_i omega^{ki}_n
]
[=sum_{i=0}^{n-1} a_i omega_{2n}^{k^2+i^2-(k-i)^2}
]
[=omega_{2n}^{k^2}sum_{i=0}^{n-1} a_i omega_{2n}^{i^2} omega_{2n}^{-(k-i)^2}
]
右边就是个卷积,可以用FTT/NTT算了。注意到下标可能是负的,可以把后面的往右移(n)位,(f_i=a_iomega_{2n}^{i^2}),(g_i=omega_{2n}^{-(i-n)^2}),(y_k=omega^{k^2}_{2n}(f imes g)_{n+k})
HNOI2019 白兔之舞
这道题要用({{i+j}choose 2}-{ichoose 2}-{j choose 2}=ij)来替换,就可以只用(n)次单位根了。
CTSC2010 性能优化
待补,先咕了