莫比乌斯反演的技巧:函数归纳
目录
函数归纳技巧
在解决部分数论题时,我们会遇到诸如 \(\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\)