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)\)。
參考程式碼