莫比乌斯反演

\(\mathit{Möbius反演}\)

前置

前置函数

单位根函数 \(\epsilon(x)\)

\(x = 1\) 时,\(\epsilon(x) = 1\);当 \(x \neq 1\) 时,\(\epsilon(x) = 0\)

幂函数 \(Id_k(x)\)

\(Id_k(x) = x^k\)
特别的,\(Id_1(x) = x\)\(Id_0(x) = 1\)
\(Id_0(x)\) 被称为常函数,简记为 \(I\)

除数和函数 \(\sigma(x)\)

\[\sigma_k(x) = \sum_{d|x} d^k \]

特别的,

  1. \(\sigma_1(x) = \sum_{d|x} d\),被称为因数和函数,简记为:\(\sigma(x)\)
  2. \(\sigma_0(x) = \sum_{d|x} 1\),被称为因数个数函数,简记为:\(\tau(x)\)
欧拉函数 \(\varphi(x)\)

\(\varphi(x)\) 是小于等于 \(x\) 的正整数中与 \(x\) 互质的数的个数。

\[\varphi(n) = n \prod_{p|n} \left(1 - \frac{1}{p}\right) \]

莫比乌斯函数 \(\mu(x)\)

\[\mu(n) = \begin{cases} 1 & n = 1 \\ (-1)^k & n \text{ 是 } k \text{ 个不同质数的乘积} \\ 0 & n \text{ 有平方因子} \end{cases} \]

积性性质

上述函数皆为积性函数,即:

\[\forall x, y \text{ 满足 } \gcd(x, y) = 1, \quad f(xy) = f(x)f(y) \]

所有积性函数都可以用线性筛\(O(n)\) 时间内预处理出 \(f(1), f(2), \dots, f(n)\)

前置定理

数论卷积

\(f, g, h\) 是定义在正整数集上的函数,若对于所有正整数 \(n\),都有

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

则称 \(h\)\(f\)\(g\) 的数论卷积,记作 \(h = f * g\)

\(\mu(x)\) 的定义

\[\mu(x) * I = \epsilon(x) \]

即:\(\mu(n)\)\(I\) 互为逆元
于是有:

\[若有:f(x) * I = g(x),则有:f(x) = g(x) * \mu(x) \]

莫比乌斯反演公式

\(f(n)\)\(g(n)\) 是定义在正整数集上的两个函数。对于所有正整数 \(n\)

若有:

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

则有:

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

证明:用 \(f(n)\) 表示 \(g(n)\) 的过程等价于 \(f(n) * I = g(n)\),两边与 \(\mu(n)\) 卷积,得 \(f(n) = g(n) * \mu(n)\)

*莫比乌斯反演不只局限于加法,还可以推广到乘法等其他运算(与阿贝尔群内即可)。
如:

\[g(n) = \prod_{d|n} f(d) \implies f(d) = \prod_{d|n} {\mu\left(\frac{n}{d}\right)} g(n) \]

推式子常用技巧

\[[gcd(a, b) = 1] = \sum_{d|gcd(a, b)} \mu(d) = \sum_d [d|a][d|b] \mu(d) \]

可将“互质”条件转化为“除数”条件,从而使用莫比乌斯反演或数论分块。

例题

Omega Numbers

直接求肯定没法求,显然是要对乘积的 \(\omega\) 等一一个数的数进行计数。直接计不好记,但我们注意到 \(\omega_{\max} \le 6\),且有 \(\omega(a_i \times a_j) = \omega(a_i) + \omega(a_j) - \omega(\gcd(a_i, a_j))\)。我们设 \(dp_{i, j}\) 表示 \(\omega(a_x) + \omega(a_y) = j\)\(\gcd (a_x, a_y) = i\)\((x, y)\) 有序点对(包括 \(x = y\))个数,那么答案显然为 \(\sum_i \sum_j (j - \omega(i)) ^ k\)。直接算 \(dp\) 数组,我们不妨设 \(f_{i, j}\) 表示 \(i \mid a_x\)\(i \mid a_y\)\(\omega(a_x) + \omega(a_y) = j\)\((x, y)\) 个数,显然,有:

\[f_{i, j} = \sum_{d \mid i} dp_{d, j} \]

我们发现 \(f\) 是好算的,我们只需开一个 \(cnt_{i, j}\) 表示 \(i \mid a_x\)\(\omega(a_x) = j\)\(x\) 的个数,对于每一个 \(cnt_i\) 进行一下加法卷积就是 \(f_i\)。那么我们有了 \(f\) 要求 \(dp\),根据莫比乌斯反演,有:

\[dp_{i, j} = \sum_{d \mid i} \mu(\frac{i}{d}) f_{d, j} \]

做完了。注意要去重,因为直接算出来的答案中 \((x, y)\) 是有序点对且有可能 \(x = y\)

code

posted @ 2026-01-29 17:23  ACehomoxue  阅读(38)  评论(1)    收藏  举报