还是经典的Mobius反演
题目描述
设$d(x)$为$x$的约数个数,给出多组$n,m$,求式子:
$$\sum_{i=1}^n \sum_{j=1}^m d(ij)$$
的值。
Input & Output’s examples
Input’s e.g. #1
1 | 2 |
Output’s e.g. #1
1 | 110 |
分析
首先我们要知道$d(x)$函数的一个性质:
$$d(ij) = \sum_{x|i} \sum_{y|j} [\gcd(x,y) = 1]$$
然后就可以愉快的推式子了qwq,把这个东西代入原式可得:
$$\sum_{i=1}^n \sum_{j=1}^m \sum_{x|i} \sum_{y|j} [\gcd(x,y) = 1]$$
根据Mobius函数的定义式,我们可以化简原式得:
$$\sum_{i=1}^n \sum_{j=1}^m \sum_{x|i} \sum_{y|j} \sum_{d|\gcd(x,y)} \mu(d)$$
我们改变枚举对象,直接枚举$d$:
$$\sum_{i=1}^n \sum_{j=1}^m \sum_{x|i} \sum_{y|j} \sum_{d=1}^{\min(n,m)} [d|\gcd(x,y)] \cdot \mu(d)$$
然后我们改变枚举顺序。
$$\sum_{d=1}^{\min(n,m)} \mu(d) \sum_{i=1}^n \sum_{j=1}^m \sum_{x|i} \sum_{y|j} [d|\gcd(x,y)]$$
然后我们不再枚举$i,j$和他们的约数,而是枚举这些约束直接乘上他们的倍数的个数,因为这些约数只会对他们的倍数有贡献。
$$\sum_{d=1}^{\min(n,m)} \mu(d) \sum_{i=1}^n \sum_{j=1}^m [d|\gcd(x,y)] \lfloor \frac nx\rfloor \lfloor \frac my\rfloor$$
同时除一下$d$:
$$\sum_{d=1}^{\min(n,m)} \mu(d) \sum_{i=1}^{\lfloor \frac nd\rfloor} \sum_{j=1}^{\lfloor \frac md\rfloor} [\gcd(x,y) \in Z] \lfloor \frac nx\rfloor \lfloor \frac my\rfloor$$
显然$\gcd(x,y) \in Z$恒成立,那么直接去掉:
$$\sum_{d=1}^{\min(n,m)} \mu(d) \sum_{i=1}^{\lfloor \frac nd\rfloor} \sum_{j=1}^{\lfloor \frac my\rfloor} \lfloor \frac nx\rfloor \lfloor \frac my\rfloor$$
然后我们根据乘法分配律:
$$\sum_{d=1}^{\min(n,m)} \mu(d) \left( \sum_{i=1}^{\lfloor \frac nd\rfloor} \lfloor \frac nx\rfloor \right) \left( \sum_{j=1}^{\lfloor \frac my\rfloor} \lfloor \frac my\rfloor \right)$$
显然括号内的式子可以进行一下数论分块,然后本题就愉快的结束了qwq
代码
1 | /* Headers */ |