单位根反演学习笔记
单位根反演学习笔记
单位根反演
用途
求多项式特定次数(为某个数倍数)的和,比如位数之和膜某个数的生成函数之和
单位根性质
单位根有一些特殊的性质。考虑要求的式子
\[ans=\sum_{i=0}^{\frac n k}[x^{ik}]f(x)=\sum_{i=0}^n[k|i][x^i]f(x)
\]
考虑构造函数使得$g(k,i)=[k|i] $
又由于\(\omega_k^{ij}=\omega_k^0=1\),且\([k\not|~~i]\)的时候都不等于1,我们考虑利用这一性质。令
\[g(k,i)=\frac{1}{k}\sum_{j=0}^{k-1}\omega_k^{ij}
\]
证明:除开上述条件成立的情况,其他情况是一个等比数列求和,即
\[\frac{1}{k} \frac{\omega_{k}^{ki}-\omega_{k}^{0}}{\omega_{k}^{i}-1}=0
\]
所以\(g(k,i)=[k|i]\)
公式推导
那么我们就可以用单位根来表示这些项的系数和了!
\[\begin{aligned}
\sum_{i=0}^{\left[\frac{n}{k}\right]}\left[x^{i k}\right] f(x) &=\sum_{i=0}^{n}[k | i]\left[x^{i}\right] f(x) \\
&=\sum_{i=0}^{n}\left[x^{i}\right] f(x) \frac{1}{k} \sum_{j=0}^{k-1} \omega_{k}^{j i} \\
&=\frac{1}{k} \sum_{i=0}^{n} a_{i} \sum_{j=0}^{k-1} \omega_{k}^{i j} \\
&=\frac{1}{k} \sum_{j=0}^{k-1} \sum_{i=0}^{n} a_{i}\left(\omega_{k}^{j}\right)^{i} \\
&=\frac{1}{k} \sum_{j=0}^{k-1} f\left(\omega_{k}^{j}\right)
\end{aligned}
\]
至于为什么叫做反演呢...我想可能是用了多项式本身来带入构造出来的式子,来表示要求的答案。而且复杂度也正好相反是\(O(k\times calc(f))\)
然后这个单位根跟FFTNTT的一样,也可以用原根的\((p-1)/n\)次方来代替。
注意有些题不好求F,也可以只用单位根反演化简\([k|i]\)
例题
dbzoj 3328
令A为递推矩阵,我们要求
\[\sum_{i=0}^n[k|i] C^i_nA^i
\]
\[=\sum_{i=0}^n\frac 1 k\sum_{j=0}^{k-1} \omega_k^{ij}C^{i}_nA^i
\]
\[=\frac 1 k \sum_{j=0}^{k-1}\sum_{i=0}^n C^i_n\omega_k^{ij}A^i
\]
\[=\frac 1 k\sum_{j=0}^{k-1}(A\omega_k^j+I)^n
\]
复杂度\(O(tk\log n)\),注意要找原根。
白兔之舞
目前在做HNOI2017,准备做HNOI2019的时候再写。
upd1 :2017做完了5/6,剩下一道要用EXLUCAS不想写,等我写完就更