莫比乌斯反演的技巧:函数归纳

目录

目录地址

上一篇

下一篇


函数归纳技巧

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

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

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

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

方程可因此化为 \(\displaystyle \sum_{d=1}^n(n/d)\cdot(m/d)\cdot \sum_{k\mid d}(\boldsymbol \mu\cdot \boldsymbol {id}^2)(k)\)

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

因此我们不妨设 \(\boldsymbol f=(\boldsymbol \mu\cdot \boldsymbol {id}^2)*\boldsymbol I\)

由于 \(\boldsymbol \mu\cdot \boldsymbol {id}^2\) 为积性函数, \(\boldsymbol I\) 为积性函数,故 \(\boldsymbol f\) 一定也为积性函数

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

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

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

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


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

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

由于 \(lcm(i,j)={ij\over gcd(i,j)}\)

\(\displaystyle ans=\sum_{i=1}^n\sum_{j=1}^m{ij\over gcd(i,j)}\)

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

\(\displaystyle ans=\sum_{g=1}^n\sum_{i=1}^{n/g}\sum_{j=1}^{m/g}{ig\cdot jg\over g}[gcd(i,j)=1]\)

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

\(\displaystyle ans=\sum_{g=1}^ng\sum_{i=1}^{n/g}i\sum_{j=1}^{m/g}j\sum_{d\mid gcd(i,j)}\boldsymbol \mu(d)\)

\(\displaystyle ans=\sum_{g=1}^ng\sum_{d=1}^{n/g}\boldsymbol \mu(d)\sum_{i=1}^{n/g}i\sum_{j=1}^{m/g}j[d\mid i\wedge d\mid j]\)

\(\displaystyle ans=\sum_{g=1}^ng\sum_{d=1}^{n/g}\boldsymbol \mu(d)\sum_{i=1}^{n/g}i[d\mid i]\sum_{j=1}^{m/g}j[d\mid j]\)

\(\displaystyle ans=\sum_{g=1}^ng\sum_{d=1}^{n/g}\boldsymbol \mu(d)\sum_{i=1}^{n/gd}id\sum_{j=1}^{m/gd}jd\)

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

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

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

考虑到 \(d\leq n/g\)\(T\leq n\)\(g\mid T\)

\(\displaystyle ans=\sum_{g=1}^ng\sum_{T=1}^n[g\mid T]\boldsymbol \mu({T\over g})\cdot ({T\over g})^2\cdot Sum(n/T)\cdot Sum(m/T)\)

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

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

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

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

\(\displaystyle T^2\cdot \sum_{g\mid T}\boldsymbol \mu({T\over g})\cdot {1\over g}=\boldsymbol {id}^2(T)\cdot \boldsymbol g(T)=(\boldsymbol{id}^2\cdot \boldsymbol g)(T)\)

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

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

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


\(\boldsymbol f\) 的求法

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

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

\(\displaystyle \boldsymbol g(1)=1\)

\(\displaystyle \boldsymbol g(p^k)=\sum_{d\mid p^k}\boldsymbol \mu(d)\boldsymbol {Inv}({p^k\over d})=\sum_{c=0}^k\boldsymbol \mu(p^c)\cdot \boldsymbol {Inv}(p^{k-c})=\boldsymbol \mu(1)\cdot \boldsymbol {Inv}(p^k)+\boldsymbol \mu(p)\cdot \boldsymbol {Inv}(p^{k-1})+0=(p^{-1})^k-(p^{-1})^{k-1},k\geq 1\)

\(\boldsymbol g(p^k)=(p^{-1})^k-(p^{-1})^{k-1}=p\cdot (\ (p^{-1})^{k-1}-(p^{-1})^{k-2}\ )=p^{-1}\cdot \boldsymbol g(p^{k-1}),k\geq 2\)

由此,我们得出线筛递推式:\(\begin{cases} invp=p^{20101009-2}\%20101009 \\\ \\ \boldsymbol f(n)\%20101009=n^2\boldsymbol g(n)\%20101009 \\\ \\ \boldsymbol g(p\times n)\%20101009=\begin{cases} invp\cdot \boldsymbol g(n)\%20101009,p\mid n \\\ \\ (invp-1)\cdot \boldsymbol g(n)\%20101009,p\nmid n \end{cases} \end{cases}\)


洛谷P3768 简单的数学题

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

同样枚举 \(gcd\)

\(\displaystyle ans=\sum_{g=1}^n\sum_{i=1}^n\sum_{j=1}^nijg[gcd(i,j)=g]=\sum_{g=1}^ng^3\sum_{i=1}^{n/g}i\sum_{j=1}^{m/g}j[gcd(i,j)=1]=\sum_{g=1}^ng^3\sum_{i=1}^{n/g}i\sum_{j=1}^{m/g}j\sum_{d\mid gcd(i,j)}\boldsymbol \mu(d)\)

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

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

\(\displaystyle ans=\sum_{g=1}^ng^3\sum_{T=1}^n[g\mid T]\boldsymbol \mu({T\over g})\cdot ({T\over g})^2\cdot Sum(n/T)\cdot Sum(m/T)=\sum_{T=1}^nSum(n/T)\cdot Sum(m/T)\cdot T^2\sum_{g\mid T}\boldsymbol \mu({T\over g})\cdot g\)

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

posted @ 2020-03-16 11:40  JustinRochester  阅读(272)  评论(0编辑  收藏  举报