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)\)。