数论反演
创建时间: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\) 为一个完全积性函数。
常见的数论函数
-
单位函数(又称指示函数),记作 \(\varepsilon(n)\)。其定义为
\[\varepsilon(n)=\begin{cases} 1 & n = 1 \\ 0 & n \neq 1 \end{cases}\]单位函数在数论函数的运算中起到类似单位 \(1\) 的作用,或用于判断某个数是否等于 \(1\)。
-
幂函数,形如 \(Id_k(n)=n^k\)。当 \(k=1\) 时,将下标省去,直接记为 \(Id(n)=n\),称之为恒等函数;当 \(k=0\) 时,该函数的值永远等于 \(1\),记作 \(\textbf 1(n)=1\),称之为常数函数。
-
除数函数,记作 \(\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\),称为因数个数函数。
-
欧拉函数,即 \(\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\) 的互不相同的质因数。
-
莫比乌斯函数,\(\mu(n)\),具体定义见莫比乌斯反演部分。
迪利克雷卷积
迪利克雷卷积是一种数论函数之间的二元运算。对于数论函数 \(f,g\),将它们的迪利克雷卷积记作 \(f*g\),定义为
不难发现,迪利克雷卷积是一种运算,并不关心各数论函数的具体定义。
例如,有数论函数 \(f,g\),则 \((f * g)(10) = f(1) g(10) + f(2)g(5) + f(5)g(2) + f(10) g(1)\)。
很容易证明,迪利克雷卷积具有以下性质:
-
交换律,即 \((f * g)(n) = (g * f)(n)\)。
-
结合律,即 \(((f * g) * h)(n) = (f * (g * h))(n)\)。
-
分配律,即 \((f * (g + h))(n) = (f * g + f * h)(n)\)。
-
当 \(f\) 和 \(g\) 都是积性函数时,\(f * g\) 也是积性函数。
对于数论函数 \(f,g\),当 \((f * g)(n) = \varepsilon(n)\) 时,称 \(f,g\) 互为逆元,记作 \(f = g^{-1}\),\(g=f^{-1}\)。
莫比乌斯反演
莫比乌斯反演的概念
假设有数论函数 \(f(n)\),设其求和函数
例如 \(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)\)!
显然,莫比乌斯函数是积性函数。
设莫比乌斯函数的求和函数 \(S(n)=\sum_{d \mid n} \mu(d)\),则
::::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];
}
}
}
莫比乌斯反演的应用
由上面的推导知莫比乌斯反演的公式
下面是莫比乌斯反演的一个经典应用,也可以直接当作结论在考场上使用。
给定正整数 \(n,m\),求
乍一看似乎无从下手。
观察发现,最难处理的是判断条件符号 \([]\),由于判断条件是 \(\gcd(i,j) = 1\),所以可以将其转化为 \(\varepsilon(\gcd(i,j))\),接下来就可以展开一系列变形了:
\(d\) 在里面并不好处理,考虑将它提出来,得到:
上式中符合条件的 \(i,j\) 各有 \(\lfloor \frac n d \rfloor,\lfloor \frac m d \rfloor\) 个,故
所以只要从 \(1\) 到 \(n\) 枚举 \(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」数字游戏;

浙公网安备 33010602011771号