• Note -「单位根反演」学习笔记


    (mathcal{Preface})

      单位根反演,顾名思义就是用单位根变换一类式子的形式。有关单位根的基本概念可见我的这篇博客

    (mathcal{Formula})

      单位根反演的公式很简单:

    [[k|n]=frac{1}ksum_{i=0}^{k-1}omega_k^{ni} ]

    (mathcal{Proof})

      分类讨论:

    1. (k|n). 那么 ((forall i)(omega_k^{ni}=1)),所以右侧为 (frac{1}ksum_{i=0}^{k-1}1=1)
    2. (k ot=n). 等比数列求和,右侧为 (frac{1}kcdotfrac{1-omega_k^{kn}}{1-omega_k^n}),其中 (omega_k^{kn}=1),故分子为 (0),分母不为 (0),式子的值为 (0)

      综上,得证。

    (mathcal{Inference})

      实际问题中,我们往往需要求出对于某个多项式(多为生成函数)(f) 的特定倍数次数的系数和。即求:

    [sum_{i=0}^{lfloor frac{n}k floor}[x^{ik}]f(x) ]

      运用单位根反演的基本公式变形:

    [egin{aligned} sum_{i=0}^{lfloorfrac{n}k floor}[x^{ik}]f(x)&=sum_{i=0}^n[k|i][x^i]f(x)\ &=sum_{i=0}^n[x^i]f(x)cdotfrac{1}ksum_{j=0}^{k-1}omega_k^{ij}\ &=frac{1}ksum_{j=0}^{k-1}sum_{i=0}^n[x^i]f(x)(omega_k^j)^i\ &=frac{1}ksum_{j=0}^{k-1}f(omega_k^j) end{aligned} ]

      只要能快速求出 (f) 在所有 (k) 次单位根处的点值,就能 (mathcal O(k)) 得出原式的值啦。

      更方便的形式,若我们想求 (imod k=r)([x^i]f(x)) 之和,只需要在运用反演时移动一下 (omega_k) 的指标:

    [egin{aligned} sum_{i=0}^n[imod k=r][x^i]f(x)&=frac{1}ksum_{i=0}^nleft(sum_{j=0}^{k-1}omega_k^{j(i-r)} ight)[x^i]f(x)\ &=frac{1}ksum_{j=0}^{k-1}omega_{k}^{-jr}f(omega_k^j) end{aligned} ]

      当然,我们常用原根代替单位根。

    (mathcal{Examples})

      「LOJ 6485」 LJJ 学二项式定理 & my solution.

  • 相关阅读:
    Python生成器
    字符串匹配——KMP算法
    字符串匹配——Brute-Force 简单匹配算法
    算法笔记--八个常见排序算法总结
    算法笔记--基数排序
    算法笔记--归并排序
    算法笔记--堆排序
    算法笔记--直接选择排序
    算法笔记--快速排序
    算法笔记--冒泡排序
  • 原文地址:https://www.cnblogs.com/rainybunny/p/14237985.html
Copyright © 2020-2023  润新知