莫比乌斯反演与狄利克雷卷积

莫比乌斯反演

数论函数

列举几个常见数论函数

  1. \(\varphi(n)\),欧拉函数,表示\(1\sim n\)中与\(n\)互质的数的个数
  2. \(d(n)\),表示\(n\)的约数个数,具体设\(n=p_1^{c_1}p_2^{c_2}……p_m^{c_m}(p_1,p_2……都是质数)\),则\(d(n)=\prod_{i=1}^m(c_i+1)\)
  3. \(\lfloor\rfloor\),下取整函数,\(\left\lfloor\frac{\lfloor\frac{a}{b}\rfloor}{c}\right\rfloor=\lfloor\frac{a}{bc}\rfloor\)
  4. \(\sigma(n)\),表示\(n\)的约数和,也即\(\sigma(n)=\prod_{i=1}^m\frac{p^{c_i+1}-1}{p_i-1}\)
  5. \(I(n)\),恒等函数,值恒为1
  6. \(id(n)\),单位函数,\(id(n)=n\)
  7. 单位函数\(\epsilon(n)=[n=1]\)
    先看几个约数函数的常见性质

\(\sum_{d|n}d\mu(\frac{n}{d})=\varphi(n)\)

\(\sum_{d|n}\varphi(d)=n\)

\(\sum_{d|n}\mu(d)=[n=1]\)

\(d(AB)=\sum_{x|A}\sum_{y|B}[\gcd(x,y)=1]\)

积性函数

定义1:若对于函数\(f\)来说,使得对于满足\(\gcd(x,y)=1\)的任意正整数\(x,y\),满足\(f(xy)=f(x)f(y)\)

则称\(f\)为积性函数.

例如:\(\varphi,d,\mu,id,I,\sigma\)都是积性函数

定义2:若对于函数\(f\),若任意正整数\(x,y\)都有\(f(xy)=f(x)f(y)\),则称\(f\)为完全积性函数

例如:\(I,id,\sigma,d\)是完全积性函数

狄利克雷卷积

定义两个数论函数\(f,g\)的狄利克雷卷积\(t=f*g\),使得:\(t(n)=\sum_{ij=n}f(i)g(j)\)

性质:

  1. 交换律:\(f*g=g*f\)
  2. 结合律:\((f*g)*t=f*(g*t)\)
  3. 分配律:\(t*(f+g)=t*f+t*g\)
  4. 标量乘法:\((x·f)*g=xf*g\)
  5. 逆元:对于任意函数\(f(1)\neq 0\),有函数\(f\)的逆\(g\)满足\(f*g=\epsilon\)

讨论一下逆的求法,对于函数\(f\)的逆\(g\),满足

\[g(n)=\frac{1}{f(1)}\left([n=1]-\sum_{i|n,i\neq n}g(i)f(\frac{n}{i})\right) \]

证明:将\(g\)带入原式,设\(t=f*g\),有

\[t(n)=\sum_{ij=n}f(i)g(j)=\sum_{ij=n}f(i)\frac{1}{f(1)}\left([n=1]-\sum_{k|j,k\neq j}g(k)f(\frac{j}{k})\right) \]

\(n=1\)时显然成立,在\(n\neq1\)时,原式等价于\(-\frac{\sum_{ij=n}f(i)\sum_{k|j,k\neq j}g(k)f(\frac{j}{k})}{f(1)}\),显然此式每一对\(ij\)能抵消,分子为0,故得证

莫反及其应用

莫比乌斯反演是关于莫比乌斯函数的,具体的证明可以由容斥原理导出,也可以看这里

莫比乌斯反演的两种形式

形式1:

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

形式2:

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

实际应用:

例1:P2568GCD

给定正整数 \(n\),求 \(1\le x,y\le n\)\(\gcd(x,y)\) 为素数的数对 \((x,y)\) 有多少对。

题意即为求

\[S=\sum_{质数p\le n}\sum_{i=1}^n\sum_{j=1}^n[\gcd(i,j)=p] \]

\[=\sum_{质数p\le n}\sum_{i=1}^{\lfloor\frac{n}{p}\rfloor}\sum_{j=1}^{\lfloor\frac{n}{p}\rfloor}[\gcd(i,j)=1] \]

\(f(i)=\sum_{i=1}^a\sum_{j=1}^b[gcd(i,j)=i],g(i)=\sum_{i|d}f(d)\),也即\(S=\sum_{质数p\le n}f(p)\)

\(g(n)=\sum_{n|d}\sum_{i=1}^a\sum_{j=1}^b[gcd(i,j)=d]=\sum_{i=1}^a\sum_{j=1}^b[n|gcd(i,j)]=\sum_{i=1}^{\lfloor\frac{a}{n}\rfloor}\sum_{j=1}^{\lfloor\frac{b}{n}\rfloor}[1|gcd(i,j)]=\lfloor\frac{a}{n}\rfloor\lfloor\frac{b}{n}\rfloor\)

所以由莫比乌斯反演定理得\(f(p)=\sum_{p|d}\mu(\frac{d}{p})g(d)=\sum_{1\le i}\mu(ip)g(i)=\sum_{1\le i}\mu(i)\lfloor\frac{n}{ip}\rfloor^2\)

\(S=\sum_{质数p\le n}\sum_{1\le i}\mu(i)\lfloor\frac{n}{ip}\rfloor^2\),设\(ip=T\),则

\[S=\sum_{T=1}^n\lfloor\frac{n}{T}\rfloor^2\sum_{质数p|T}^{T}\mu(\frac{T}{p}) \]

预处理\(\mu\)前缀和,数论分块即可,后面的式子可以在筛质数的时候用埃氏筛求出\(p\)的集合即可

例2:P2398

给定\(n\),求:\(\sum_{i=1}^n\sum_{j=1}^n\gcd(i,j)\)

原式=

\[\sum_{d=1}^n\sum_{i=1}^n\sum_{j=1}^nd[gcd(i,j)=d]=\sum_{d=1}d\sum_{i=1}^{\lfloor\frac{n}{d}\rfloor}\sum_{j=1}^{\lfloor\frac{n}{d}\rfloor}[gcd(i,j)=1]=\sum_{d=1}^ndf(d) \]

\[=\sum_{d=1}^nd\sum_{i=1}^{\lfloor\frac{n}{d}\rfloor}\mu(i)\lfloor\frac{n}{id}\rfloor^2 \]

一样设\(T=id\),则原式=

\[\sum_{T=1}^n\lfloor\frac{n}{T}\rfloor^2\sum_{i|T}\frac{T}{i}\mu(i) \]

因为\(\sum_{d|n}\varphi(d)=n\),所以将欧拉函数带入莫比乌斯反演公式,可以得到\(\varphi(n)=\sum_{d|n}d\mu(\frac{n}{d})\),仔细观察,也即我们最终结果后面的那坨式子等价于\(\varphi(T)\)

故最终\(S=\sum_{T=1}\lfloor\frac{n}{T}\rfloor^2\varphi(T)\),此时预处理出\(\varphi\)的前缀和,结合数论分块,就可以做到\(O(n+q\sqrt n)\)的复杂度(q为询问次数)

例三:

给出 \(n,m\) 和一个长度为 \(n-1\) 的序列 \(x\),保证 \(x_i\) 互不相同。

\[\sum_{i_1=1}^{\lfloor\frac{m}{x_1}\rfloor}\sum_{i_2=1}^{\lfloor\frac{m}{\max\lbrace x_1,x_2\rbrace}\rfloor}\sum_{i_3=1}^{\lfloor\frac{m}{\max\lbrace x_2 ,x_3\rbrace}\rfloor}……\sum_{i_n=1}^{\lfloor\frac{m}{x_{n-1}\rfloor}}[\gcd(i_1,i_2,i_3……i_n)=1] \]

答案对 \(998244353\) 取模。

\[f(n)=\sum_{i_1=1}^{\lfloor\frac{m}{x_1}\rfloor}\sum_{i_2=1}^{\lfloor\frac{m}{\max\lbrace x_1,x_2\rbrace}\rfloor}\sum_{i_3=1}^{\lfloor\frac{m}{\max\lbrace x_2 ,x_3\rbrace}\rfloor}……\sum_{i_n=1}^{\lfloor\frac{m}{x_{n-1}\rfloor}}[\gcd(i_1,i_2,i_3……i_n)=n],g(n)=\sum_{n|d}f(d) \]

\(g(n)\)展开为:

\[g(n)=\sum_{i_1=1}^{\lfloor\frac{m}{x_1}\rfloor}\sum_{i_2=1}^{\lfloor\frac{m}{\max\lbrace x_1,x_2\rbrace}\rfloor}\sum_{i_3=1}^{\lfloor\frac{m}{\max\lbrace x_2 ,x_3\rbrace}\rfloor}……\sum_{i_n=1}^{\lfloor\frac{m}{x_{n-1}\rfloor}}[n|\gcd(i_1,i_2,i_3……i_n)] \]

除过去,变成

\[g(n)=\sum_{i_1=1}^{\lfloor\frac{m}{nx_1}\rfloor}\sum_{i_2=1}^{ \lfloor\frac{m}{n\max\lbrace x_1,x_2\rbrace}\rfloor}\sum_{i_3=1}^{\lfloor\frac{m}{n\max\lbrace x_2 ,x_3\rbrace}\rfloor}……\sum_{i_n=1}^{\lfloor\frac{m}{nx_{n-1}\rfloor}}[1|\gcd(i_1,i_2,i_3……i_n)] \]

假若令\(x_n=-\infty,x_0=x_n\),则式子可以改写为

\[g(n)=\prod_{i=1}^n\lfloor\frac{m}{n\max\lbrace x_i,x_{i-1}\rbrace}\rfloor \]

分子可以预处理比较,设比较后为\(a_i\),\(b_i=\lfloor\frac{m}{a_i}\rfloor\)

\[g(n)=\prod_{i=1}^n\lfloor\frac{m}{na_i}\rfloor=\prod_{i=1}^n\lfloor\frac{b_i}{n}\rfloor \]

因为我们所求为:

\[f(1)=\sum_{i=1}^{\min_{1\le i\le n}\lbrace b_i\rbrace}\mu(i)g(i) \]

上面那个\(min\)看上去很恶心,预处理改成\(d\)

展开变成:

\[f(1)=\sum_{i=1}^d\mu(i) \prod_{k=1}^n\lfloor \frac{b_k}{i}\rfloor \]

这个式子是一个扩展形式的数论分块

例四

由于出题人懒得写背景了,题目还是简单一点好。

输入一个整数 \(n\) 和一个整数 \(p\),你需要求出:

\[\left(\sum_{i=1}^n\sum_{j=1}^n ij \gcd(i,j)\right) \bmod p \]

其中 \(\gcd(a,b)\) 表示 \(a\)\(b\) 的最大公约数。

对于100%的数据,\(5 \times 10^8 \leq p \leq 1.1 \times 10^9,n\le10^{10}\)\(p\) 为质数。

一道比较套路的题

原式=

\[\sum_{k=1}^nk\sum_{i=1}^n\sum_{j=1}^n[\gcd(i,j)=k]ij \]

\(f(x)=\sum_{i=1}^n\sum_{j=1}^n[\gcd(i,j)=x]ij,g(x)=\sum_{x|d}f(d)\)

展开\(g(x)\),有

\[g(x)=\sum_{i=1}^n\sum_{j=1}^n[x|gcd(i,j)]ij=x^2\sum_{i=1}^{\lfloor \frac{n}{x}\rfloor}i\sum_{j=1}^{\lfloor \frac{n}{x}\rfloor}j=x^2\sum_{i=1}^{\lfloor \frac{n}{x}\rfloor}i\frac{\lfloor \frac{n}{x}\rfloor(\lfloor \frac{n}{x}\rfloor+1)}{2}=x^2\frac{\lfloor \frac{n}{x}\rfloor^2(\lfloor \frac{n}{x}\rfloor+1)^2}{4} \]

所以回带,原式=

\[\sum_{k=1}^nkf(k)=\sum_{k=1}^nk\sum_{i=1}^{\lfloor\frac{n}{k}\rfloor}\mu(i)g(ik)=\sum_{k=1}^nk\sum_{i=1}^{\lfloor\frac{n}{k}\rfloor}\mu(i)(ik)^2\frac{\lfloor \frac{n}{ik}\rfloor^2(\lfloor \frac{n}{ik}\rfloor+1)^2}{4} \]

\[=\sum_{T=1}^nT^2\frac{\lfloor\frac{n}{T}\rfloor^2(\lfloor\frac{n}{T}\rfloor+1)^2}{4}\sum_{k|T}k\mu(\frac{T}{k})=\sum_{T=1}^nT^2\frac{\lfloor\frac{n}{T}\rfloor^2(\lfloor\frac{n}{T}\rfloor+1)^2}{4}\varphi(T) \]

\(T^2\varphi(T)\)的部分用杜教筛/Min25筛,另一部分数论分块即可

例五

\(d(x)\)\(x\) 的约数个数,给定 \(n,m\),求

\[\sum_{i=1}^n\sum_{j=1}^md(ij) \]

对于 \(100\%\) 的数据,\(1\le T,n,m \le 50000\)

考虑拆开\(d\)函数

引理:\(d(ij)=\sum_{x|i}\sum_{y|j}[\gcd(x,y)=1]\)

证明:

考虑从质因数的角度,考虑简化版情况

  1. \(i,j\)互质,此时右式的\(\gcd(x,y)\)显然成立,而左式的\(d(ij)=d(i)*d(j)\),成立

  2. \(i=p^a,j=p^b,p\in primes\),此时显然有\(d(ij)=a+b+1\),而左式当且仅当\(x=1\)\(y=1\),再加上\(x=1,y=1\)的情况,也有\(a+b+1\)个解

  3. 一般情况下,可以将\(ij\)分解质因数,然后因为左式是完全积性函数,仍成立,而右式根据乘法原理合并若干个\(a+b+1\),就正好可以合并出若干情况,其中乘1就是不考虑这个位的影响,\(a+b\)就是考虑这个质因数在累加上\([1,a+b]\),得证

那么原式即为

\[\sum_{i=1}^n\sum_{j=1}^m\sum_{x|i}\sum_{y|j}[\gcd(x,y)=1] \]

\[=\sum_{x=1}^n\sum_{y=1}^m[\gcd(x,y)=1]\left\lfloor\frac{n}{x}\right\rfloor \left\lfloor\frac{m}{y}\right\rfloor \]

\(f(x)=\sum_{i=1}^n\sum_{j=1}^m[\gcd(i,j)=x]\left\lfloor\frac{n}{i}\right\rfloor \left\lfloor\frac{m}{j}\right\rfloor,g(n)=\sum_{n|d}f(d)\)

展开\(g(x)\),得到

\[g(x)=\sum_{i=1}^n\sum_{j=1}^m[x|\gcd(i,j)]\left\lfloor\frac{n}{i}\right\rfloor \left\lfloor\frac{m}{j}\right\rfloor=\sum_{i=1}^{\left\lfloor\frac{n}{x}\right\rfloor}\sum_{j=1}^{\left\lfloor\frac{m}{x}\right\rfloor}\left\lfloor\frac{n}{xi}\right\rfloor \left\lfloor\frac{m}{xj}\right\rfloor \]

回带,原式即为求\(f(1)=\sum_{i=1}^n\mu(i)g(i)\)

考虑如何求解\(g\),观察可得

\[g(x)=\sum_{i=1}^{\left\lfloor\frac{n}{x}\right\rfloor}\sum_{j=1}^{\left\lfloor\frac{m}{x}\right\rfloor}\left\lfloor\frac{\left\lfloor\frac{n}{x}\right\rfloor}{i}\right\rfloor \left\lfloor\frac{\left\lfloor\frac{m}{x}\right\rfloor}{j}\right\rfloor \]

\(n'=\lfloor\frac{n}{x}\rfloor,m'=\lfloor\frac{m}{x}\rfloor\),则

\[g(x)=\sum_{i=1}^{n'}\lfloor\frac{n'}{i}\rfloor\sum_{j=1}^{m'}\lfloor\frac{m'}{j}\rfloor \]

那么两段式子明显可以预处理,设\(S(n)=\sum_{i=1}^n\lfloor\frac{n}{i}\rfloor\),则有

\[f(1)=\sum_{i=1}^n\mu(i)S(\lfloor \frac{n}{i}\rfloor)S(\lfloor\frac{m}{i}\rfloor) \]

明显的,后半截的两个\(S\)可以数论分块

#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
#define N 50050
#define int long long
int mu[N], s[N], n, m, t, prime[N], v[N];
int get(int n,int x) {
	return n / (n / x);
}
void init() {
	for (int i = 1; i <= N - 5; i++)mu[i] = 1;
	for (int i = 2; i <= N - 5; i++) {
		if (!v[i]) {
			v[i] = 1;
			mu[i] = -1;
			for (int j = 2; i * j <= N - 5; j++) {
				mu[i * j] *= -1;
				v[i * j] = 1;
				if (j % i == 0)mu[i * j] = 0;
			}
		}
	}
//	for (int i = 1; i <= 20; i++)cout << mu[i] << " ";
//	cout << endl;
	for (int i = 1; i <= N - 5; i++)mu[i] += mu[i - 1];
	for (int i = 1; i <= N - 5; i++) {
		for (int l = 1, r; l <= i; l = r + 1) {
			r = get(i, l);
			s[i] += (r - l + 1) * (i / l);
		}
	}
}
signed main() {
	cin >> t;
	init();
	while (t--) {
		cin >> n >> m;
		if (n > m)swap(n, m);
		int ans = 0;
		for (int i = 1, j; i <= n; i = j + 1) {
			j = min(get(n, i), get(m, i));
			ans += (mu[j] - mu[i - 1]) * s[m / i] * s[n / i];
		}
		cout << ans << "\n";
	}
}

事实上,这个性质还可以推广,证明类似

\[d(ij)=\sum_{x|i}\sum_{y|j}[\gcd(x,y)=1] \]

\[d(ijk)=\sum_{x|i}\sum_{y|j}\sum_{z|k}[\gcd(x,y)=1][\gcd(x,z)=1][\gcd(y,z)=1] \]

一般形式:

\[d(\prod_{i=1}^na_i)=\sum_{b_1|a_1}……\sum_{b_n|a_n}[\gcd(b_1,b_2)]……(每一个数对) \]

甚至于还可以扩展到\(\sigma_k(n)=\sum_{d|n}d^k(上式即为k=0时)\)

\[\sigma_k(ij)=\sum_{x|i}\sum_{y|j}[\gcd(i,j)=1]x^k·\frac{j^k}{y^k} \]

\[\sigma_{k'}(ijk)=\sum_{x|i}\sum_{y|j}\sum_{z|k}[\gcd(x,y)=1][\gcd(x,z)=1][\gcd(y,z)=1](x\frac{j}{y}\frac{k}{z})^{k'} \]

posted @ 2022-11-30 22:42  spdarkle  阅读(70)  评论(0编辑  收藏  举报