莫比乌斯反演

本文前置芝士:

  1. 对莫比乌斯函数以及莫比乌斯反演有着基本的了解
  2. 会一些数论,能看懂Latex
  3. 较强的语文能力
  4. 没了

本文主要介绍了三种在莫反题目中有着较广泛应用的求解方法,结合例题说明。 应注意,若某一变量的取值无一确定上界,或是可在后续式子中判定其值的界,其取值上界将不被标明。


1. 化式子

来看jzptab的式子:

$$ \large\sum_{i = 1}^n \sum_{j = 1} ^ {m} \ lcm(i, j) $$

显然地,我们有 $$ \large\sum_{i = 1}^n \sum_{j = 1} ^ {m} \ \frac{i \times j}{\gcd(i,j)} $$ 首先,我们需要进行 $\gcd$ 的代换,以使形如 $[\gcd(i,j) = m]$ 的贡献计算式产生。 因此,我们有 $$ \large\sum_{k = 1} \sum_{i = 1}^n \sum_{j = 1} ^ {m} \ \frac{i \times j}{k}\ [\gcd(i,j) =k] $$ 接下来进行一系列变形。

\[\large\begin{aligned} & \large\sum_{k = 1} \sum_{i = 1}^n \sum_{j = 1} ^ {m} \ \frac{i \times j}{k}\ [\gcd(i,j) =k] \\=\ & \sum_{k = 1} \frac 1 k \sum_{i = 1}^n \sum_{j = 1} ^ {m} \ i \times j\ [\gcd(i,j) =k] \\=\ & \sum_{k = 1} \frac 1 k \sum_{i = 1}^n \sum_{j = 1} ^ {m} \ i \times j\ [\gcd(i/k,j/k) = 1] \\=\ & \sum_{k = 1} \frac 1 k \sum_{i = 1}^{\lfloor \frac n k \rfloor} \sum_{j = 1} ^ {\lfloor \frac m k \rfloor} \ ik \times jk\ [\gcd(i,j) = 1] \\=\ & \sum_{k = 1} k \sum_{i = 1}^{\lfloor \frac n k \rfloor} \sum_{j = 1} ^ {\lfloor \frac m k \rfloor} \ i \times j\ [\gcd(i,j) = 1] \end{aligned} \]

在第三行中,我们使用 $ \frac i k $ 作为新的 \(i\),这使得我们得以将枚举范围缩小、将 \(\frac 1 k\) 化为 \(k\),并将形如 \([\gcd(i,j) = m]\) 的计算式化为形如 \([\gcd(i,j) = 1]\) 的式。第三个作用是本求解方法的精髓所在。

我们已经了解了下式:

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

因此可以如此地将原式变形:

\[\large\begin{aligned} &\sum_{k = 1} k \sum_{i = 1}^{\lfloor \frac n k \rfloor} \sum_{j = 1} ^ {\lfloor \frac m k \rfloor} \ i \times j\ [\gcd(i,j) = 1] \\=\ & \sum_{k = 1} k \sum_{i = 1}^{\lfloor \frac n k \rfloor} \sum_{j = 1} ^ {\lfloor \frac m k \rfloor} \ i \times j\ \sum_{e|gcd(i,j)} \mu(e) \\=\ & \sum_{k = 1} k \sum_{i = 1}^{\lfloor \frac n k \rfloor} \sum_{j = 1} ^ {\lfloor \frac m k \rfloor} \ i \times j\ \sum_{e|i,\ e|j} \mu(e) \\=\ & \sum_{k = 1} k\sum_{e = 1} \sum_{e|i}^{\lfloor \frac n k \rfloor} \sum_{e|j} ^ {\lfloor \frac m k \rfloor} \ i \times j\ \mu(e) \\=\ & \sum_{k = 1} k\sum_{e = 1} \sum_{i = 1}^{\lfloor \frac n {k\,e} \rfloor} \sum_{j = 1} ^ {\lfloor \frac m {k\,e} \rfloor} \ ie \times je\ \mu(e) \\=\ & \sum_{k = 1} k\sum_{e = 1} \mu(e) \ e^2 \sum_{i = 1}^{\lfloor \frac n {k\,e} \rfloor} \sum_{j = 1} ^ {\lfloor \frac {m} {k\,e} \rfloor} \ i \times j\ \\=\ & \sum_{k = 1} k\sum_{e = 1} \mu(e) \ e^2 (\ \sum_{i = 1} ^ {\lfloor \frac {n} {k\,e} \rfloor} i \ ) (\ \sum_{j = 1} ^ {\lfloor \frac {m} {k\,e} \rfloor} j \ ) \end{aligned} \]

\(s(n) = \sum\limits_{i = 1} ^ {n} i = \frac{ n\times (n+1) } 2\)
原式即为 $$\large\sum_{k = 1} k\sum_{e = 1} \mu(e) \ e^2 \ s(\lfloor \frac {n} {ke} \rfloor) \ s(\lfloor \frac {m} {ke} \rfloor) $$
为好求,我们将 \(\mu\) 函数提前

\[\large\sum_{e = 1} \mu(e) \ e^2\sum_{k = 1} k \ s(\lfloor \frac {n} {ke} \rfloor) \ s(\lfloor \frac {m} {ke} \rfloor) \]

此时,我们可使用数论分块分别计算两个 \(\sum\) ,在洛谷上可以得到100分的好成绩。然而,这并非极限——因为在bzoj上只能得到70分。因此,我们需要进一步优化。

例题:约数个数和


2. 代换消根号

此方法是方法1的后继,并只在两次数论分块时才可用,这是由于其使用了将两次枚举 \(k\)\(e\) 变为了枚举 \(T = ke\)\(e\),并使用 \(\frac T e\) 来代换 \(k\)。我们将在接下来的介绍中看到此方法的优化思路。

继续讨论jzptab。我们可以通过如上的叙述将式子进行此类代换:

\[\large\begin{aligned} &\sum_{e = 1} \mu(e) \ e^2\sum_{k = 1} k \ s(\lfloor \frac {n} {ke} \rfloor) \ s(\lfloor \frac {m} {ke} \rfloor) \\=\ & \sum_{e = 1} \mu(e) \ e\sum_{k = 1} ke \ s(\lfloor \frac {n} {ke} \rfloor) \ s(\lfloor \frac {m} {ke} \rfloor) \\=\ & \sum_{T = 1}\sum_{e|T}T \ \mu(e) e \ s(\lfloor \frac {n} T \rfloor) \ s(\lfloor \frac {m} T \rfloor) \\=\ & \sum_{T = 1}T \ s(\lfloor \frac {n} T \rfloor) \ s(\lfloor \frac {m} T \rfloor) \sum_{e|T} \mu(e) e \end{aligned} \]

我们可以看到,后部 \(\sum\limits_{e|T} \mu(e) e\) 的部分可以通过线性筛与倍数贡献求出来,这样就可以做到单次数论分块求解了。

讨论于神之怒加强版。

\[\large\begin{aligned} &\sum_{i = 1}^n \sum_{j = 1} ^ m \gcd(i,j) ^ c \\=\ & \sum_{k=1} k ^ c \sum_{i = 1}^n \sum_{j = 1} ^ m \ [\gcd(i,j) = k] \\=\ & \sum_{k=1} k ^ c \sum_{i = 1}^ {\lfloor \frac {n} {k} \rfloor} \sum_{j = 1} ^ {\lfloor \frac {m} {k} \rfloor} \ [\gcd(i,j) = 1] \\=\ & \sum_{k=1} k ^ c \sum_{i = 1}^ {\lfloor \frac {n} {k} \rfloor} \sum_{j = 1} ^ {\lfloor \frac {m} {k} \rfloor} \ \sum_{e|i, e|j}\mu(e) \\=\ & \sum_{k=1} k^c \sum_{e|i, e|j}\mu(e) \lfloor \frac {n} {ke} \rfloor \lfloor \frac {m} {ke} \rfloor \\=\ & \sum_{T=1} \lfloor \frac {n} {T} \rfloor \lfloor \frac {m} {T} \rfloor \sum_{e|T} \mu(e) (\frac T e) ^ c \end{aligned} \]

可以看出来,后部分是 \(mu\) 函数和幂函数的卷积,而幂函数是积性的。因此,我们可以通过线性筛求得 $f(x) = \sum\limits_{e|T} \mu(e) (\frac T e) ^ c $ 的值,以此优化求解。

总的来说,此方法的核心是通过配凑与代换,联系起两个且需要分别数论分块求解的部分,构造出一个新的(不一定)积性的函数,并使用枚举因子或直接筛的方法进行求值。

例题:YY的GCD and DZY loves math I


3. 连加换连乘

这题真有黑的难度?

首先,显然题目让我们求的式子是:

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

为了化这个式子,我们需要先知道我们一直在用的 \(k\) 变量枚举的是什么。首先,我们用 \(k\) 代换掉了 \(\gcd(i,j)\),这样后面的部分就表示 \(k\) 的贡献度,其代表了 \(k\) 对答案贡献的次数,并由于 \(k\) 对答案贡献的方式是加,因此贡献次数就代表着其系数。现在我们只需要把贡献方式改成乘即可。

这是很简单的,甚至于不用变贡献度的枚举方法,只需要把它放在幂的位置上即可。

式子的化法,中间过程不再详细展开:

\[\large\begin{aligned} &\prod_{i=1}^n\prod_{j=1}^m f(\gcd(i,j)) \\=\ & \prod_{k=1} f(k) ^{\sum_{i=1}^n\sum_{j=1}^m \ [gcd(i,j)=k]} \\=\ & \prod_{k=1} f(k) ^{\sum\limits_{e=1} \mu(e) \lfloor \frac n {k\,e} \rfloor\lfloor \frac m {k\,e} \rfloor} \end{aligned} \]

我们可以看到,在结果中又出现了 \(ke\) 的形式。那我们可以使用方法2优化求解吗?显然是可以的。我们通过相似的方式,用 \(T\) 替换 \(ke\),并把连加换成连乘。具体看如下化法:

\[\large\begin{aligned} &\prod_{k=1} f(k) ^{\sum\limits_{e=1} \mu(e) \lfloor \frac n {k\,e} \rfloor\lfloor \frac m {k\,e} \rfloor} \\=\ & \prod_{T=1} \prod_{d|T} f(d) ^ {\mu(\frac T d)\lfloor \frac n T \rfloor\lfloor \frac m T \rfloor} \\=\ & \prod_{T=1} (\ \prod_{d|T} f(d) ^ {\mu(\frac T d) }\ ) ^ {\lfloor \frac n T \rfloor\lfloor \frac m T \rfloor} \end{aligned} \]

于是,我们只需要通过预处理括号内的连乘,即可单次根号求解。值得注意的是,此类函数难以通过筛法求得,因此可以通过枚举因子的方式 \(O(n \ln n)\) 地求得。

upd:此 trick 的更常用表述是 \(\ln\to\exp\)

例题:Product and 幽灵乐团

posted @ 2022-06-04 10:49  joke3579  阅读(130)  评论(3编辑  收藏  举报