zoukankan      html  css  js  c++  java
  • 单位根反演学习笔记

    单位根反演学习笔记

    单位根反演

    用途

    求多项式特定次数(为某个数倍数)的和,比如位数之和膜某个数的生成函数之和

    单位根性质

    单位根有一些特殊的性质。考虑要求的式子

    [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 ot|~~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])

    公式推导

    那么我们就可以用单位根来表示这些项的系数和了!

    [egin{aligned} sum_{i=0}^{left[frac{n}{k} ight]}left[x^{i k} ight] f(x) &=sum_{i=0}^{n}[k | i]left[x^{i} ight] f(x) \ &=sum_{i=0}^{n}left[x^{i} ight] 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} ight)^{i} \ &=frac{1}{k} sum_{j=0}^{k-1} fleft(omega_{k}^{j} ight) end{aligned} ]

    至于为什么叫做反演呢...我想可能是用了多项式本身来带入构造出来的式子,来表示要求的答案。而且复杂度也正好相反是(O(k imes 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}^nfrac 1 ksum_{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_nomega_k^{ij}A^i ]

    [=frac 1 ksum_{j=0}^{k-1}(Aomega_k^j+I)^n ]

    复杂度(O(tklog n)),注意要找原根。

    白兔之舞

    目前在做HNOI2017,准备做HNOI2019的时候再写。

    upd1 :2017做完了5/6,剩下一道要用EXLUCAS不想写,等我写完就更

  • 相关阅读:
    AFNetwork 作用和用法详解
    ios 常见错误记录
    UIView的setNeedsLayout, layoutIfNeeded 和 layoutSubviews 方法之间的关系解释
    AutoLayout
    矩阵的法式
    极小多项式
    对角化
    线性映射
    线性方程组的解
    特征值和特征向量
  • 原文地址:https://www.cnblogs.com/lcyfrog/p/12858992.html
Copyright © 2011-2022 走看看