学习笔记第五十三节:单位根反演

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/Deep_Kevin/article/details/102586561

正题

      学过FFT的都知道单位根有一个这样的性质:[n|t]=\frac{\sum_{i=0}^{n-1}\omega_{n}^{it}}{n}

      那么我们就可以解决这样的东西:\sum_{i=0}^nC_{n}^ip^ia_{i\mod k}

      怎么解决呢?我们枚举一个j:\sum_{j=0}^{k-1}a_j\sum_{i=0}^nC_n^ip^i[k|i-j]

      我们构造一个多项式f(x)=\sum_{i=0}^nC_n^ip^ix^i

      你会发现一个奇妙的事情:

      \sum_{i=0}^{k-1}f(\omega_k^i) \\=\sum_{i=0}^{k-1}\sum_{j=0}^nC_n^jp^j\omega_k^{ij} \\=\sum_{j=0}^nC_n^jp^j\sum_{i=0}^{k-1}\omega_k^{ij} \\=\sum_{j=0}^nC_n^jp^j[k|j]

      如果我们要求\sum_{j=0}^nC_n^jp^j[k|j-q],把它往上推发现第一条式子变成了\sum_{i=0}^{k-1}f(\omega_k^i)\omega_k^{-iq}

      那么原来的式子就变成了\sum_{j=0}^{k-1}a_j\sum_{i=0}^{k-1}f(\omega_k^i)\omega_k^{-ij}

      好的这个式子就是k^2的,因为f可以快速算。

      当然你也可以把它看成自变量为\omega_k^{-j},然后直接快速插值。

      我们来想想一个式子:C_{i+j}^2-C_i^2-C_j^2=ij,展开即可证明

      然后就变成了\sum_{j=0}^{k-1}a_j\sum_{i=0}^{k-1}f(\omega_k^i)\omega_k^{-C_{i+j}^2+C_i^2+C_j^2}

      把后面那一项拆开就可以一遍NTT了!

猜你喜欢

转载自blog.csdn.net/Deep_Kevin/article/details/102586561