Preface
我發現我現在學一個新算法總是把相關題目做完了才來寫233
單位根反演總的來說不是一個非常難的姿勢,但是確實解決某些問題的必要前提
它可以在\(O(k)\)的時間內求一個數列(或是生成函數)所有下標是\(k\)的倍數的點值和
以下的一些基礎姿勢例如單位根的性質及求法等以下不再贅述
Formula
先上單位根反演的公式:
\[[k|n]=\frac{1}{k}\sum_{i=0}^{k-1}\omega_k^{ni} \]
我們來考慮證明這個公式,分類討論:
若\(k|n\),那么:
\[\frac{1}{k}\sum_{i=0}^{k-1}\omega_k^{ni}=\frac{1}{k}\sum_{i=0}^{k-1}(\omega_k^n)^i=\frac{1}{k}\sum_{i=0}^{k-1}\omega_k^0=1 \]
若\(k\not| n\),那么根據等比數列求和有:
\[\frac{1}{k}\sum_{i=0}^{k-1}\omega_k^{ni}=\frac{1}{k}(\omega_k^0\cdot \frac{\omega_k^0-\omega_k^{kn}}{1-\omega_k^n}) \]
由於其分子為\(1-1=0\),因此該公式成立
Others
有些時候我們只知道\(k|n\)的點值和還不夠,比如說我們要知道下標\(\mod k=r\)的點值和
考慮通過函數的平移來解決問題,如果我們此時將該序列的生成函數乘上\(x^{-r}\)再套用上面的方法就可以得到答案了
Example
給幾道簡單點的例題練練手吧
- LOJ #6485. LJJ 學二項式定理 生成函數+單位根反演 sol
- BZOJ 3328: PYXFIB 生成函數+單位根反演 sol
- UOJ #450. 【集訓隊作業2018】復讀機 生成函數+單位根反演 sol
Postscript
最近感悟到了生成函數之美,因此最近的做題方向也在想着數學題的方向靠近吧233