zoukankan      html  css  js  c++  java
  • 莫比乌斯反演的技巧:函数归纳

    目录

    目录地址

    上一篇

    下一篇


    函数归纳技巧

    在解决部分数论题时,我们会遇到诸如 (displaystyle sum_{d=1}^n(n/d)cdot(m/d)cdot sum_{kmid d}oldsymbol mu(k)cdot k^2) 的形式

    这种形式确实可求,但效率上实在是比较低

    我们考虑到第二个求和号内实际上是 ((oldsymbol mucdot oldsymbol {id}^2)(k)) 的形式

    而根据前面我们证明的性质, (oldsymbol mu)(oldsymbol {id}^2) 为积性函数,故 (oldsymbol mucdot oldsymbol {id}^2) 也为积性函数

    方程可因此化为 (displaystyle sum_{d=1}^n(n/d)cdot(m/d)cdot sum_{kmid d}(oldsymbol mucdot oldsymbol {id}^2)(k))

    考虑到现在可以发现,第二个求和号实际上是迪利克雷卷积 ((oldsymbol mucdot oldsymbol {id}^2)*oldsymbol I)

    因此我们不妨设 (oldsymbol f=(oldsymbol mucdot oldsymbol {id}^2)*oldsymbol I)

    由于 (oldsymbol mucdot oldsymbol {id}^2) 为积性函数, (oldsymbol I) 为积性函数,故 (oldsymbol f) 一定也为积性函数

    所以原方程即可化为 (displaystyle sum_{d=1}^n(n/m)cdot (m/d)cdot oldsymbol f(d))

    我们就很明确应该线筛 (oldsymbol f)

    从这个例子可以发现,如果我们把函数归纳起来,很大程度上可以简化方程和复杂度

    其次,通过线性筛或者其它筛法预处理函数,可以很快的求出函数值或函数前缀和的值


    洛谷P1829 [国家集训队]Crash的数字表格 / JZPTAB

    (displaystyle ans=sum_{i=1}^nsum_{j=1}^mlcm(i,j)\%20101009) ,同样规定 (nleq m)

    由于 (lcm(i,j)={ijover gcd(i,j)})

    (displaystyle ans=sum_{i=1}^nsum_{j=1}^m{ijover gcd(i,j)})

    我们同样枚举 (gcd)(displaystyle ans=sum_{g=1}^nsum_{i=1}^nsum_{j=1}^m{ijover g}[gcd(i,j)=g])

    (displaystyle ans=sum_{g=1}^nsum_{i=1}^{n/g}sum_{j=1}^{m/g}{igcdot jgover g}[gcd(i,j)=1])

    接下来,就是一些元函数反演、每个变量移到相应的求和号后面、调换枚举顺序,这样的常规操作

    (displaystyle ans=sum_{g=1}^ngsum_{i=1}^{n/g}isum_{j=1}^{m/g}jsum_{dmid gcd(i,j)}oldsymbol mu(d))

    (displaystyle ans=sum_{g=1}^ngsum_{d=1}^{n/g}oldsymbol mu(d)sum_{i=1}^{n/g}isum_{j=1}^{m/g}j[dmid iwedge dmid j])

    (displaystyle ans=sum_{g=1}^ngsum_{d=1}^{n/g}oldsymbol mu(d)sum_{i=1}^{n/g}i[dmid i]sum_{j=1}^{m/g}j[dmid j])

    (displaystyle ans=sum_{g=1}^ngsum_{d=1}^{n/g}oldsymbol mu(d)sum_{i=1}^{n/gd}idsum_{j=1}^{m/gd}jd)

    (displaystyle ans=sum_{g=1}^ngsum_{d=1}^{n/g}oldsymbol mu(d)cdot d^2cdot Sum(n/gd)cdot Sum(m/gd))

    其中 (displaystyle Sum(n)=sum_{i=1}^ni)

    到这里以后,我们发现枚举还是 (O(n)) 的,显然过不了,所以我们令 (T=gd) ,将枚举 (d) 改为枚举 (T)

    考虑到 (dleq n/g)(Tleq n)(gmid T)

    (displaystyle ans=sum_{g=1}^ngsum_{T=1}^n[gmid T]oldsymbol mu({Tover g})cdot ({Tover g})^2cdot Sum(n/T)cdot Sum(m/T))

    调换枚举顺序 (displaystyle ans=sum_{T=1}^nSum(n/T)cdot Sum(m/T)cdot T^2cdot sum_{gmid T}oldsymbol mu({Tover g})cdot {1over g})

    我们看到后面那个求和号 (displaystyle sum_{gmid T}oldsymbol mu({Tover g})cdot {1over g}=sum_{gmid T}oldsymbol mu({Tover g})cdot oldsymbol{Inv}(g))

    其中 (oldsymbol {Inv}(n)) 表示 (n) 在模 (20101009) 意义下的逆元,显然为完全积性函数

    所以,这本质上是两个积性函数的迪利克雷卷积,记 (oldsymbol g=oldsymbol mu*oldsymbol {Inv}) 也为积性函数

    (displaystyle T^2cdot sum_{gmid T}oldsymbol mu({Tover g})cdot {1over g}=oldsymbol {id}^2(T)cdot oldsymbol g(T)=(oldsymbol{id}^2cdot oldsymbol g)(T))

    由于这是两个积性函数的乘积,所以记 (oldsymbol f=oldsymbol {id}^2cdot (oldsymbol mu*oldsymbol {Inv}))

    (displaystyle ans=sum_{T=1}^noldsymbol f(T)cdot Sum(n/T)cdot Sum(m/T))

    只要求出 (oldsymbol f) 的前缀和,后面的用二维整出分块搞一搞就出来了


    (oldsymbol f) 的求法

    (oldsymbol f) 的求法难度主要在于 (oldsymbol g)

    (oldsymbol g) 可求出 (oldsymbol f) 一定可在 (O(n)) 的时间内筛出,故我们考虑如何求解前者

    (displaystyle oldsymbol g(1)=1)

    (displaystyle oldsymbol g(p^k)=sum_{dmid p^k}oldsymbol mu(d)oldsymbol {Inv}({p^kover d})=sum_{c=0}^koldsymbol mu(p^c)cdot oldsymbol {Inv}(p^{k-c})=oldsymbol mu(1)cdot oldsymbol {Inv}(p^k)+oldsymbol mu(p)cdot oldsymbol {Inv}(p^{k-1})+0=(p^{-1})^k-(p^{-1})^{k-1},kgeq 1)

    (oldsymbol g(p^k)=(p^{-1})^k-(p^{-1})^{k-1}=pcdot ( (p^{-1})^{k-1}-(p^{-1})^{k-2} )=p^{-1}cdot oldsymbol g(p^{k-1}),kgeq 2)

    由此,我们得出线筛递推式:(egin{cases} invp=p^{20101009-2}\%20101009 \ \ oldsymbol f(n)\%20101009=n^2oldsymbol g(n)\%20101009 \ \ oldsymbol g(p imes n)\%20101009=egin{cases} invpcdot oldsymbol g(n)\%20101009,pmid n \ \ (invp-1)cdot oldsymbol g(n)\%20101009,p mid n end{cases} end{cases})


    洛谷P3768 简单的数学题

    (displaystyle ans=sum_{i=1}^nsum_{j=1}^nijgcd(i,j)\%p)

    同样枚举 (gcd)

    (displaystyle ans=sum_{g=1}^nsum_{i=1}^nsum_{j=1}^nijg[gcd(i,j)=g]=sum_{g=1}^ng^3sum_{i=1}^{n/g}isum_{j=1}^{m/g}j[gcd(i,j)=1]=sum_{g=1}^ng^3sum_{i=1}^{n/g}isum_{j=1}^{m/g}jsum_{dmid gcd(i,j)}oldsymbol mu(d))

    因此 (displaystyle ans=sum_{g=1}^ng^3sum_{d=1}^{n/g}oldsymbol mu(d)sum_{i=1}^{n/g}i[dmid i]sum_{j=1}^{m/g}j[dmid j]=sum_{g=1}^ng^3sum_{d=1}^{n/g}oldsymbol mu(d)sum_{i=1}^{n/gd}idsum_{j=1}^{m/gd}jd=sum_{g=1}^ng^3sum_{d=1}^{n/g}oldsymbol mu(d)cdot d^2cdot Sum(n/gd)cdot Sum(m/gd))

    同样 (displaystyle Sum(n)=sum_{i=1}^ni) 且我们同样考虑枚举 (T=gd)

    (displaystyle ans=sum_{g=1}^ng^3sum_{T=1}^n[gmid T]oldsymbol mu({Tover g})cdot ({Tover g})^2cdot Sum(n/T)cdot Sum(m/T)=sum_{T=1}^nSum(n/T)cdot Sum(m/T)cdot T^2sum_{gmid T}oldsymbol mu({Tover g})cdot g)

    后面那边 (displaystyle T^2sum_{gmid T}oldsymbol mu({Tover g})cdot g) 实际上为积性函数 (oldsymbol f=oldsymbol {id}^2cdot (oldsymbol mu*oldsymbol {id})=oldsymbol {id}^2cdot oldsymbol varphi)

  • 相关阅读:
    UVA11584 划分成回文串
    UVA1220Party at Hali-Bula(树的最大独立集 + 唯一性判断)
    BUAA1389愤怒的DZY(最大值最小化)
    九度1502 最大值最小化问题
    App(4.25)
    App(4.24)
    App(4.23)
    App(4.22)
    学习进度条(八)
    App(4.21)
  • 原文地址:https://www.cnblogs.com/JustinRochester/p/12502774.html
Copyright © 2011-2022 走看看