P3327 [SDOI2015] 约数个数和

P3327 [SDOI2015] 约数个数和

题目描述

给定 \(n\)\(m\)。求:

\[\sum_{i=1}^n \sum_{j=1}^m \sigma_0(ij) \]

\(\sigma_0\) 表示因数个数。

解题思路

首先一个很重要的性质

\[\sigma_0(xy) = \sum_{i|x} \sum{j|y} [\gcd(i,j)=1] \]

证明比较复杂,可以感性理解。

得到这个性质之后:

\[\sum_{i=1}^n \sum_{j=1}^m \sigma_0(ij) \]

变成:

\[\sum_{i=1}^n \sum_{j=1}^m \sum_{x|i} \sum_{y|j} [\gcd(x,y)=1] \]

改变枚举顺序:

\[\sum_{x=1}^n \sum_{y=1}^m \lfloor \frac{n}{x} \rfloor \lfloor \frac{m}{y} \rfloor [\gcd(x,y)=1] \]

定义函数:

\[f(x) = \sum_{i=1}^n \sum_{j=1}^m \lfloor \frac{n}{i} \rfloor \lfloor \frac{m}{j} \rfloor [\gcd(i,j)=x] \]

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

有:

\[g(x) = \sum_{i=1}^n \sum_{j=1}^m \lfloor \frac{n}{i} \rfloor \lfloor \frac{m}{j} \rfloor [x|\gcd(i,j)] \]

提出 \(x\)

\[g(x) = \sum_{i=1}^{\frac{n}{x}} \sum_{j=1}^{\frac{m}{x}} \lfloor \frac{n}{xi} \rfloor \lfloor \frac{m}{xj} \rfloor \]

根据上文定义,所求答案为 \(f(1)\)

莫比乌斯反演:

\[f(x) = \sum_{x|d} \mu(\frac{d}{x}) g(d) \]

所以所求 \(f(1)\) 即为:

\[f(1) = \sum_{d} \mu(d) g(d) \]

如何快速求出 \(g(x)\)

\[g(x) = \sum_{i=1}^{\frac{n}{x}} \lfloor \frac{n}{xi} \rfloor \cdot \sum_{j=1}^{\frac{m}{x}} \lfloor \frac{m}{xj} \rfloor \]

应用分配律不难理解。

定义:

\[s(x) = \sum_{i}^{x} \lfloor \frac{x}{i} \rfloor \]

可以 \(O(n\sqrt{n})\) 预处理。

则:

\[g(x) = s(\lfloor \frac{n}{x} \rfloor) \cdot s(\lfloor \frac{m}{x} \rfloor) \]

带回 \(f(1)\) 表达式:

\[f(1) = \sum_{d}^{min(n,m)} \mu(d) \cdot s(\lfloor \frac{n}{x} \rfloor) \cdot s(\lfloor \frac{m}{x} \rfloor) \]

整除分块即可。

总时间复杂度 \(O(n\sqrt n+T\sqrt n)\)

参考代码

posted @ 2024-05-25 08:26  DeepSeaSpray  阅读(4)  评论(0编辑  收藏  举报