「SDIO2015」约数个数和 - 莫比乌斯反演
题意描述
设 \(d(x)\) 为 \(x\) 的约数个数,给定 \(n, m\),求
\[ \sum_{i = 1}^n\sum_{j = 1}^m d(ij) \]
对于所有的数据,\(1 \leq N, M \leq 50000,\ 1 \leq T \leq 50000\)。
解题思路
约数个数的变换
对这个式子,我们首先要解决的是 \(d(ij)\)。对于 \(d(ij)\),我们有以下结论:
\[ d(ij) = \sum_{x | i}\sum_{y | j}[\gcd(x, y) = 1] \]
证明:我们可以对 \(i\),\(j\) 分解质因数:\(i = \prod{ p_i^{a_i} }\),\(j = \prod{ p_i^{b_i} }\),故 \(ij = \prod{ p_i^{c_i = a_i + b_i} }\)。对于 \(ij\) 的每个约数中的 \(p_i\),我们总可以找到一个 \(d_i (d_i \le c_i)\) 进行对应。而对于每个 \(d_i\),我们分为两种情况:
- \(d_i <= a_i\),则 \(p_i\) 全部在 \(i\) 中取;
- \(a_i < d_i \le a_i + b_i\),则 \(p_i\) 在 \(i\) 中取完后再在 \(b_i\) 中补充。
我们可以发现,对于每一种 \(d_i\),用上述方法我们总可以找到唯一一种用 \(a_i\)、\(b_i\) 对应的方法;所以对应每一种 \(ij\) 的约数,用上述方法我们总可以找到对应且为唯一对应。
于是我们可以利用 \(i\)、\(j\) 的约数进行统计。令 \(x | i\),\(y | j\);当 \(\gcd(i, j) = 1\) 时,对于 \(p_i\),\(i\)、\(j\) 中仅有一个含有 \(p_i\):
- 当仅有 \(x\) 含有 \(p_i\) 时,对应上述方法 \(1\);
- 当仅有 \(y\) 含有 \(p_i\) 时,其中「\(x\) 不含有 \(p_i\),\(y\) 含有 \(p_i\)」所含情况数和「\(i\) 中的 \(p_i\) 被取完,\(y\) 含有 \(p_i\)」相同,对于 \(d(ij)\) 只统计个数来说是等价的。所以对应上述方法 \(2\)。
综上,我们仅需统计满足 \(\gcd(i, j) = 1\) 的 \((i, j)\) 的个数即可。即 \(d(ij) = \sum_{x | i}\sum_{y | j}[\gcd(x, y) = 1]\)。
莫比乌斯反演
接下来原式就变成了下列形式:
\[ \sum_{i = 1}^n\sum_{j = 1}^m\sum_{x | i}\sum_{y | j}[\gcd(x, y) = 1] \]
我们设 \(A(n, m) = \sum_{i = 1}^n \sum_{j = 1}^m\sum_{x | i}\sum_{y | j}[\gcd(x, y) = 1]\),显然 \(A(n, m)\) 即为答案。
对于 \([\gcd(x, y) = 1]\) 其中的 \(1\) 不好化简,于是我们可以设下列函数:
\[ \begin{align*} f(a) &= \sum_{i = 1}^n\sum_{j = 1}^m\sum_{x | i}\sum_{y | j}[\gcd(x, y) = a] \\ &= \sum_{x = 1}^n\sum_{y = 1}^m \lfloor \frac{n}{x} \rfloor \lfloor \frac{m}{y} \rfloor [\gcd(x, y) = a] \end{align*} \]
显然 \(A(n, m) = f(1)\)。接下来我们要化简 \(f(a)\)。我们设下列函数:
\[ \begin{align*} F(b) &= \sum_{b | a}f(a) \\ &= \sum_{b | a}\sum_{x = 1}^n\sum_{y = 1}^m \lfloor \frac{n}{x} \rfloor \lfloor \frac{m}{y} \rfloor [\gcd(x, y) = a] \\ &= \sum_{t = 1}^{ \min\{ \lfloor \frac{n}{a} \rfloor \lfloor \frac{m}{a} \rfloor \} }\sum_{x = 1}^n\sum_{y = 1}^m \lfloor \frac{n}{x} \rfloor \lfloor \frac{m}{y} \rfloor [\gcd(x, y) = a] \\ &= \sum_{x = 1}^n\sum_{y = 1}^m \lfloor \frac{n}{x} \rfloor \lfloor \frac{m}{y} \rfloor [b | \gcd(x, y)] \\ &= \sum_{x = 1}^n\sum_{y = 1}^m \lfloor \frac{n}{x} \rfloor \lfloor \frac{m}{y} \rfloor [b | x][b | y] \\ &= \sum_{x = 1}^n\sum_{y = 1}^m \lfloor \frac{n}{x} \rfloor \lfloor \frac{m}{y} \rfloor [b | x][b | y] \\ &= \sum_{i = 1}^{ \lfloor\frac{n}{b}\rfloor }\sum_{j = 1}^{ \lfloor\frac{m}{b}\rfloor } \lfloor\frac{n}{bi}\rfloor\lfloor\frac{m}{bj}\rfloor \\ \end{align*} \]
由于 \(F(b) = \sum_{b | a}f(a)\),我们可以进行莫比乌斯反演:
\[ f(a) = \sum_{a | b}\mu(\frac{b}{a})F(b) \]
接下来可以带入 \(A(n, m)\):
\[ \begin{align*} A(n, m) &= f(1) \\ &= \sum_{b}^{ \min\{n, m\} }\mu(b)F(b) \\ &= \sum_{b}^{ \min\{n, m\} }\mu(b)\sum_{i = 1}^{ \lfloor\frac{n}{b}\rfloor }\sum_{j = 1}^{ \lfloor\frac{m}{b}\rfloor } \lfloor\frac{n}{bi}\rfloor\lfloor\frac{m}{bj}\rfloor \\ &= \sum_{b}^{ \min\{n, m\} }\mu(b)(\sum_{i = 1}^{ \lfloor\frac{n}{b}\rfloor }\lfloor\frac{n}{bi}\rfloor)(\sum_{j = 1}^{ \lfloor\frac{m}{b}\rfloor } \lfloor\frac{m}{bj}\rfloor) \\ &= \sum_{b}^{ \min\{n, m\} }\mu(b)(\sum_{i = 1}^{ \lfloor\frac{n}{b}\rfloor }\lfloor\frac{\lfloor\frac{n}{b}\rfloor}{i}\rfloor)(\sum_{j = 1}^{ \lfloor\frac{m}{b}\rfloor }\lfloor\frac{\lfloor\frac{m}{b}\rfloor}{j}\rfloor) \end{align*} \]
接下来预处理一下 \(\mu(n)\) 的前缀和与 \(\sum_{i = 1}^n\lfloor\frac{n}{i}\rfloor\) 的前缀和,在询问时用数论分块求 \(A(n, m)\) 即可。预处理复杂度 \(O(n\sqrt{n})\),单次询问复杂度 \(O(\sqrt{n})\)。
代码演示
1 |
|