数论反演

创建时间:2025-12-23


迪利克雷卷积

数论函数的定义

数论函数(也称算术函数),是一种定义域为自然数,值域为复数的函数。

当数论函数 \(f(n)\) 满足对所有互质的 \(n,m\),都有 \(f(nm)=f(n)f(m)\) 时,称 \(f\) 为一个积性函数。

特别的,当函数 \(f(n)\) 对所有 \(n,m\)\(n,m\) 不一定互质)都满足 \(f(n)=f(n)f(m)\) 时,称 \(f\) 为一个完全积性函数。

常见的数论函数

  1. 单位函数(又称指示函数),记作 \(\varepsilon(n)\)。其定义为

    \[\varepsilon(n)=\begin{cases} 1 & n = 1 \\ 0 & n \neq 1 \end{cases}\]

    单位函数在数论函数的运算中起到类似单位 \(1\) 的作用,或用于判断某个数是否等于 \(1\)

  2. 幂函数,形如 \(Id_k(n)=n^k\)。当 \(k=1\) 时,将下标省去,直接记为 \(Id(n)=n\),称之为恒等函数;当 \(k=0\) 时,该函数的值永远等于 \(1\),记作 \(\textbf 1(n)=1\),称之为常数函数。

  3. 除数函数,记作 \(\sigma_k(n)\),定义为

    \[\sigma_k(n)=\sum_{d\mid n} d^k \]

    \(k=1\) 时,写成 \(\sigma(k)=\sum_{d\mid n} d\),称为因数和函数;当 \(k=0\) 时,写成 \(\textup{d}(n)=\sum_{d\mid n} \textbf 1\),称为因数个数函数。

  4. 欧拉函数,即 \(\varphi(n)\),定义为

    \[\varphi(n)=\begin{cases} 1 & n = 1 \\ n \Pi \frac {p_i} {p_i-1} & n \neq 1 \end {cases}\]

    其中 \(p_i\)\(n\) 的互不相同的质因数。

  5. 莫比乌斯函数,\(\mu(n)\),具体定义见莫比乌斯反演部分。

迪利克雷卷积

迪利克雷卷积是一种数论函数之间的二元运算。对于数论函数 \(f,g\),将它们的迪利克雷卷积记作 \(f*g\),定义为

\[(f * g)(n) = \sum_{d \mid n} f(d) g(\frac n d) \]

不难发现,迪利克雷卷积是一种运算,并不关心各数论函数的具体定义。

例如,有数论函数 \(f,g\),则 \((f * g)(10) = f(1) g(10) + f(2)g(5) + f(5)g(2) + f(10) g(1)\)

很容易证明,迪利克雷卷积具有以下性质:

  1. 交换律,即 \((f * g)(n) = (g * f)(n)\)

  2. 结合律,即 \(((f * g) * h)(n) = (f * (g * h))(n)\)

  3. 分配律,即 \((f * (g + h))(n) = (f * g + f * h)(n)\)

  4. \(f\)\(g\) 都是积性函数时,\(f * g\) 也是积性函数。

对于数论函数 \(f,g\),当 \((f * g)(n) = \varepsilon(n)\) 时,称 \(f,g\) 互为逆元,记作 \(f = g^{-1}\)\(g=f^{-1}\)

莫比乌斯反演

莫比乌斯反演的概念

假设有数论函数 \(f(n)\),设其求和函数

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

例如 \(F(10)=f(1)+f(2)+f(5)+f(10)\)

在某些题目中,\(f(n)\) 很难计算,而 \(F(n)\) 却很好求出,此时,我们就需要一个由 \(F\) 计算 \(f\) 的工具,这就是莫比乌斯反演的意义。

莫比乌斯函数

根据定义:

\(\begin{aligned} \begin{cases} F(1) = f(1) \\ F(2) = f(1) + f(2) \\ F(3) = f(1) + f(3) \\ F(4) = f(1) + f(2) + f(4) \\ F(5) = f(1) + f(5) \\ F(6) = f(1) + f(2) + f(3) + f(6) \\ F(7) = f(1) + f(7) \\ F(8) = f(1) + f(8) \end{cases} \end{aligned}\)
解得:\(\begin{aligned} \begin{cases} f(1) = F(1) \\ f(2) = F(2) - F(1) \\ f(3) = F(3) - F(1) \\ f(4) = F(4) - F(2) \\ f(5) = F(5) - F(1) \\ f(6) = F(6) - F(3) - F(2) + F(1) \\ f(7) = F(7) - F(1) \\ f(8) = F(8) - F(4) \end{cases} \end{aligned}\)

容易发现,\(f(n)\) 的解形如 \(f(n)=\sum_{d \mid n} \mu(d) F(\frac n d)\),其中 \(\mu\) 是一个系数函数。

根据计算和推导得到:当 \(n\neq 1\)\(n=p_1^{\alpha_1}p_2^{\alpha_2}p_3^{\alpha_3}\cdots p_k^{\alpha_k}\)\(p_i\) 是互不相同的质数,\(\alpha_i\) 是正整数),则

\[\mu(n)=\begin{cases} 1 & n = 1 \\ (-1)^k & n \neq 1 \wedge \forall \alpha_i = 1 \\ 0 & n \neq 1 \wedge \exist \alpha_i \ge 2 \end{cases}\]

而这就是所谓的莫比乌斯函数 \(\mu(n)\)

显然,莫比乌斯函数是积性函数。

设莫比乌斯函数的求和函数 \(S(n)=\sum_{d \mid n} \mu(d)\),则

\[S(n) = \begin{cases} 1 & n = 1 \\ 0 & n \neq 1 \\ \end{cases}\]

::::info[证明1(双向映射)]

\(n=1\) 时,\(S(n) = \mu(1) = 1\)

\(n\neq 1\) 时,设 \(n=p_1^{\alpha_1} p_2^{\alpha_2} p_3^{\alpha_3} \cdots p_k^{\alpha_k}\)\(k>0\)\(p_i\) 是互不相同的质数,\(\alpha_i\) 是正整数),故 \(n\) 的任何因数 \(d\) 都可以表示为 \(p_1^{\beta_1} p_3^{\beta_2} p_3^{\beta_3} \cdots p_k^{\beta_k}\)\(0 \le \beta_i \le \alpha_i\))。

当存在 \(\beta_i \ge 2\) 时,\(\mu(d) = 0\),对 \(S(n)\) 无贡献。所以只需要考虑 \(\beta_i = 0,1\) 的情况。

对于任意一个 \(\beta_1 = 0\) 的因数 \(d\),都可以唯一对应一个满足 \(\beta'_1 = 1\)\(n\) 的因数 \(p_1 d\)。同理,对于任意一个 \(\beta_1 = 1\) 的因数 \(p_1 d\),都可以唯一对应一个满足 \(\beta'_1 = 0\)\(n\) 的因数 \(d\)。而由莫比乌斯函数的定义式知 \(\mu(d) + \mu(pd) = 0\)。所以 \(S(n)=0\)

::::

::::info[证明2(二项式定理)]

类比法1做分类讨论:

\(n=1\) 时,\(S(n) = \mu(1) = 1\)

\(n \neq 1\) 时,设 \(n=p_1^{\alpha_1} p_2^{\alpha_2} p_3^{\alpha_3} \cdots p_k^{\alpha_k}\)\(k>0\)\(p_i\) 是互不相同的质数,\(\alpha_i\) 是正整数),\(n\) 的任意因数 \(d\) 都可以表示为 \(p_1^{\beta_1} p_3^{\beta_2} p_3^{\beta_3} \cdots p_k^{\beta_k}\)\(0 \le \beta_i \le \alpha_i\))。

显然,我们只关心满足 \(\beta_i = 0,1\)\(d\)。因为 \(d\) 的标准分解式为 \(d=\Pi_{\beta_i = 1} p_i\),所以当有恰好 \(r\)\(i\) 满足 \(\beta_i = 1\) 时,\(\mu(d) = (-1)^r\)。这样的 \(d\)\(C_k^r\) 个,所以
\(S(n) = C_k^0 (-1)^0 + C_k^1 (-1)^1 + C_k^2 (-1)^2 + \cdots + C_k^k (-1)^k\)。由二项式定理得:\(S(n) = (1 + (-1))^k = 0^k = 0\)

::::

这与单位函数的定义完全相同,所以 \(S = \varepsilon\),也可以认为是 \(\mu * \textbf 1 = \varepsilon\)

计算莫比乌斯函数

实际应用时,如果只要计算单个数的莫比乌斯函数的话可以直接 \(O(\sqrt n)\) 分解质因数,但通常使用莫比乌斯函数时都需要要大规模预处理 \(\mu(n)\),需要高效的做法。

因为莫比乌斯函数是积性函数,所以我们大胆猜测可以通过线性筛算出莫比乌斯函数。事实上这是正确的,代码也很好写。

void init() {
	mu[1] = 1;
	for (int i = 2; i < N; i++) {
		if (!vis[i]) {
			primes.push_back(i);
			mu[i] = -1;
		}
		for (int j : primes) {
			if (i * j >= N)
				break;
			vis[i * j] = true;
			if (i % j == 0) {
				mu[i * j] = 0;
				break;
			} else
				mu[i * j] = -mu[i];
		}
	}
}

莫比乌斯反演的应用

由上面的推导知莫比乌斯反演的公式

\[f(n) = \sum_{d \mid n} \mu(d) F(\frac n d) \]

下面是莫比乌斯反演的一个经典应用,也可以直接当作结论在考场上使用。

给定正整数 \(n,m\),求

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

乍一看似乎无从下手。

观察发现,最难处理的是判断条件符号 \([]\),由于判断条件是 \(\gcd(i,j) = 1\),所以可以将其转化为 \(\varepsilon(\gcd(i,j))\),接下来就可以展开一系列变形了:

\[\begin{aligned} 原式 &= \sum_{i=1}^n \sum_{j=1}^m \varepsilon(\gcd(i, j)) \\ &= \sum_{i=1}^n \sum_{j=1}^m S(gcd(i,j)) \\ &= \sum_{i=1}^n \sum_{j=1}^m \sum_{d \mid \gcd(i, j)} \mu(d) \\ &= \sum_{i=1}^n \sum_{j=1}^m \sum_{d \mid n \wedge d \mid m} \mu(d) \end{aligned}\]

\(d\) 在里面并不好处理,考虑将它提出来,得到:

\[\sum_d \mu(d) \sum_{i \le n \wedge d \mid i} \sum_{j \le m \wedge d \mid j} \textbf 1 \]

上式中符合条件的 \(i,j\) 各有 \(\lfloor \frac n d \rfloor,\lfloor \frac m d \rfloor\) 个,故

\[原式 = \sum_d \mu(d) \lfloor \frac n d \rfloor \lfloor \frac m d \rfloor \]

所以只要从 \(1\)\(n\) 枚举 \(d\) 套公式就行了。

此外,莫比乌斯反演还有一个常用的结论:

\[\mu^2(n) = \sum_{d^2 \mid n} \mu(d) \]

\(n\) 是否有平方因子的条件函数等于右式。

::::info[证明]
\(n\) 没有平方因子时,根据莫比乌斯函数的定义,左式为 \(1\),右式 = \(\mu(1) = 1\)

\(n\) 有平方因子时,左式等于 \(0\)。设 \(n\) 的最大平方因子为 \(k^2\)\(k>1\)),易证 \(d^2 \mid n \Leftrightarrow d^2 \mid k^2 \Leftrightarrow d \mid k\)。所以右式 = \(\sum_{d^2 \mid k^2} \mu(d) = \sum_{d \mid k} \mu(d) = \varepsilon(k) = 0\)
::::

欧拉反演

欧拉反演和莫比乌斯反演一样也是常见的数论反演,欧拉反演的应用场景更狭窄一些,但效率往往高于莫比乌斯反演。

练习题

莫比乌斯反演

P4450 双亲数
P1390 公约数的和
P3455 [POI 2007] ZAP-Queries
P2522 [HAOI2011] Problem b
P2257 YY的GCD
P3312 [SDOI2014] 数表
P4318 完全平方数
P6156 简单题
P6222 「P6156 简单题」加强版
P3911 最小公倍数之和
P6271 [湖北省队互测2014] 一个人的数论
P14009 「florr IO Round 1」数字游戏

欧拉反演

posted @ 2026-06-02 16:49  xubaichuan  阅读(6)  评论(0)    收藏  举报