1. 公式
设 \(f,g\) 为数论函数。
若 \(\displaystyle f(n)=\sum_{d|n}g(d)\),就有 \(\displaystyle g(n)=\sum_{d|n}\mu(d)f\left(\frac{n}{d}\right)\).
若 \(\displaystyle f(n)=\sum_{n|d}g(d)\),就有 \(\displaystyle g(n)=\sum_{n|d}\mu\left(\frac{d}{n}\right)f(d)\).
2. 证明
2.1. 证法壹
暴力强代,变换求和顺序即可。
2.2. 证法贰
有 \(f=g*1\),两边同乘一个 \(\mu\) 即可推出 \(g=\mu*f\).
对于第二个柿子,证明的核心实际上是利用 \(\mu *1=\epsilon\),就有
3. 经典例题
若无特殊声明,下文的 \(n/k\) 都代指 \(\displaystyle \left\lfloor\frac{n}{k}\right\rfloor\).
3.1. 用法壹
在 \(\mathcal O(\sqrt a)\) 内求出 \(\displaystyle \sum_{i=1}^a\sum_{j=1}^b[\gcd(i,j)=k]\),其中 \(k,a,b\) 给定。
令
由于 \(\sum_{n\mid d}g(d)\) 的含义是:在 \([1,a]\) 与 \([1,b]\) 中分别选出两个数 \(x,y\),它们的 \(\gcd\) 为 \(n\) 的倍数的数对数量。所以实际上是范围之内 \(n\) 的倍数两两组合,也就是
则有
枚举 \(t=d/k\) 则有
然后整除分块 + 前缀和即可。
\(\text{Additional}\):上面的玩意也可以拓展到多维,留给读者自行思考。
3.2. 用法贰
在 \(\mathcal O(\sqrt a)\) 内求出 \(\displaystyle \sum_{p\in \text{Prime}}\sum_{i=1}^a\sum_{j=1}^b[\gcd(i,j)=p]\),其中 \(a,b\) 给定。
其实就是在上一种情况多加了一维。所求即 \(\displaystyle \sum_{p\in \text{Prime}} g(p)\).
考虑枚举 \(T=tp\),搞掉前面的求和,然后尝试快速计算后面的 \(\mu\).
后面那一坨 \(\mu\) 是可以预处理的(枚举质数,再枚举 \(T\),加进 \(f(T)\))。下文介绍两种方法:
3.2.1. 方法一
rep(i,1,pc)
for(int j=1;j*p[i]<=maxn-5;++j) f[j*p[i]]+=mu[j];
rep(i,2,maxn-5) f[i]+=f[i-1];
相当于埃筛复杂度 \(\mathcal O(n\log\log n)\).
3.2.2. 方法二
想要更快?可以和欧拉筛一起搞,就是 \(\mathcal O(n)\):
3.3. 用法叁
在 \(\mathcal O(\sqrt a)\) 内求出 \(\displaystyle \sum_{i=1}^a\sum_{j=1}^b[\gcd(i,j)=k]\cdot i j\),其中 \(k,a,b\) 给定。
同 3.1. 用法壹
,但是 \(f(n)\) 统计的方式为:
3.4. 用法肆
计算 \(\displaystyle \sum_{i=1}^n \sum_{j=1}^m \sigma_1(\gcd(i,j))\) 式中 \(\sigma_1(\gcd(i,j))\leqslant a\) 的项之和。有 \(q\) 次 \(a,n,m\) 不同的询问。
枚举 \(\gcd\),用类似 3.2. 用法贰
的方式来推导:
令 \(\displaystyle h(T)=\sum_{d|T} \mu \left(\frac{T}{d}\right)\cdot \sigma_1(d)\),我们可以从小到大枚举限制 \(a\),依次贡献给函数 \(h\).
具体来讲就是预处理出 \(\sigma_1\),用一个双指针判断是否可以加入,若加入就枚举 \(T/d\) 即可。复杂度 \(\displaystyle \sum_{i=1}^n \frac{n}{i}\approx n\ln n\).
3.5. 用法伍
\[\begin{align}\sum_{i=1}^n\gcd(i,n)&=\sum_{d\mid n}d\cdot \sum_{i=1}^n [\gcd(i,n)=d]\\&=\sum_{d\mid n}d\cdot \sum_{i=1}^{n} [\gcd(i/d,n/d)=1]\\&=\sum_{d\mid n}d\cdot \varphi(n/d)\end{align} \]
3.6. 用法陆
初始给定 \(k\),共 \(q\) 次询问,每次给出 \(n,m\),求
\[\sum_{i=1}^n\sum_{j=1}^m\text{gcd}^k(i,j)\bmod (10^9+7) \]\(q\leqslant 2000,1\leqslant n,m,k\leqslant 5\cdot 10^6\).
答案就是
后面那一坨并不好限制 \(\mu(t)\) 形成整除分块的形式,所以尝试交换和式
记 \(T=tg\),转而枚举 \(T\)
记 \(\displaystyle f(T)=\sum_{g\mid T}^{}g^k\mu(T/g)\),只要能预处理出这个函数,就可以每次询问整除分块,做到 \(\mathcal O(n^{1/2}T)\) 的复杂度。由于 \(f(T)\) 是两个积性函数的卷积,所以它也是积性函数,那么
那么质数及质数次幂的 \(f\) 都很好算了,这个函数可以直接欧拉筛。
4. 计算
因为是个积性函数,所以可以用欧拉筛。
void init() {
u[1]=1;
rep(i,2,lim) {
if(!is[i]) p[++pc]=i,u[i]=-1;
rep(j,1,pc) {
if(p[j]*i>lim) break;
is[p[j]*i]=1;
if(i%p[j]==0) break;
u[p[j]*i]=-u[i];
}
}
}