P3327 [SDOI2015] 約數個數和

DeepSeaSpray發表於2024-05-25

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

參考程式碼

相關文章