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\),就有

\[\begin{align} \sum_{n|d}\mu\left(\frac{d}{n}\right)f(d)&=\sum_{k=1}^{+\infty}\mu(k)f(kn)\\ &=\sum_{k=1}^{+\infty}\mu(k)\sum_{kn|d}g(d)\\ &=\sum_{n|d}g(d)\sum_{k|\frac{d}{n}}\mu(k)\\ &=\sum_{n|d}g(d)\left [\frac{d}{n}=1\right]\\ &=g(n) \end{align} \]

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\) 给定。

\[g(n)=\sum_{i=1}^a\sum_{j=1}^b[\gcd(i,j)=n] \]

\[f(n)=\sum_{n|d}g(d) \]

由于 \(\sum_{n\mid d}g(d)\) 的含义是:在 \([1,a]\)\([1,b]\) 中分别选出两个数 \(x,y\),它们的 \(\gcd\)\(n\) 的倍数的数对数量。所以实际上是范围之内 \(n\) 的倍数两两组合,也就是

\[\left\lfloor\frac{a}{n}\right\rfloor \times \left\lfloor \frac{b}{n} \right\rfloor \]

则有

\[g(k)=\sum_{k|d}\mu\left(\frac{d}{k}\right)f(d) \]

枚举 \(t=d/k\) 则有

\[=\sum_{t=1}^{\min\{a/k,b/k\}}\mu(t)f(tk) \]

\[=\sum_{t=1}^{\min\{a/k,b/k\}}\mu(t)\cdot \left\lfloor\frac{a}{t k} \right\rfloor\cdot \left\lfloor\frac{b}{t k} \right\rfloor \]

然后整除分块 + 前缀和即可。

\(\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)\).

\[\text{Ans}=\sum_{p\in \text{Prime}} \sum_{t=1}^{\min\{a/p,b/p\}}\mu(t)\cdot \left\lfloor\frac{a}{t p} \right\rfloor\cdot \left\lfloor\frac{b}{t p} \right\rfloor \]

考虑枚举 \(T=tp\),搞掉前面的求和,然后尝试快速计算后面的 \(\mu\).

\[\begin{align} &=\sum_{T=1}^{\min\{a,b\}}\sum_{p|T,p\in \text{Prime}} \mu \left(\frac{T}{p}\right)\cdot\left\lfloor\frac{a}{T} \right\rfloor\cdot \left\lfloor\frac{b}{T} \right\rfloor\\ &=\sum_{T=1}^{\min\{a,b\}}\left\lfloor\frac{a}{T} \right\rfloor\cdot \left\lfloor\frac{b}{T} \right\rfloor\sum_{p|T,p\in \text{Prime}} \mu \left(\frac{T}{p}\right) \end{align} \]

后面那一坨 \(\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)\) 统计的方式为:

\[\begin{align} f(n)&=\sum_{i=1}^{a/n}i n\cdot \sum_{j=1}^{ b/n} j n\\ &=\frac{(1+(a/n))\times (a/n)}{2}\times \frac{(1+(b/n))\times (b/n)}{2}\times n^2 \end{align} \]

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. 用法贰 的方式来推导:

\[=\sum_{T=1}^{\min\{n,m\}}\left\lfloor\frac{n}{T} \right\rfloor\cdot \left\lfloor\frac{m}{T} \right\rfloor\cdot \sum_{d|T} \mu \left(\frac{T}{d}\right)\cdot \sigma_1(d) \]

\(\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\).

答案就是

\[\sum_{t=1}^{\min\{n/k,m/k\}}\mu(t)\sum_{g=1}^{\min\{n,m\}}g^k\cdot \left\lfloor\frac{n}{tg} \right\rfloor\cdot \left\lfloor\frac{m}{tg} \right\rfloor \]

后面那一坨并不好限制 \(\mu(t)\) 形成整除分块的形式,所以尝试交换和式

\[\sum_{g=1}^{\min\{n,m\}}g^k\sum_{t=1}^{\min\{n/k,m/k\}}\mu(t)\cdot \left\lfloor\frac{n}{tg} \right\rfloor\cdot \left\lfloor\frac{m}{tg} \right\rfloor \]

\(T=tg\),转而枚举 \(T\)

\[\sum_{T=1}^{\min\{n,m\}}\left\lfloor\frac{n}{T} \right\rfloor\cdot \left\lfloor\frac{m}{T} \right\rfloor\sum_{g\mid T}^{}g^k\mu(T/g) \]

\(\displaystyle f(T)=\sum_{g\mid T}^{}g^k\mu(T/g)\),只要能预处理出这个函数,就可以每次询问整除分块,做到 \(\mathcal O(n^{1/2}T)\) 的复杂度。由于 \(f(T)\) 是两个积性函数的卷积,所以它也是积性函数,那么

\[\begin{align}f(T)&=\prod_{i=1}f(\text{P}_i^{w_i})\\&=\prod_{i=1}\left(\text{P}_i^{k(w_i-1)}\cdot \mu(\text{P}_i)+\text{P}_i^{kw_i}\cdot \mu(1)\right)\\&=\prod_{i=1}\text{P}_i^{k(w_i-1)}\cdot \left(\text{P}_i^k-1\right)\end{align} \]

那么质数及质数次幂的 \(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];
		}
	}
}
posted on 2021-02-17 11:41  Oxide  阅读(60)  评论(0编辑  收藏  举报