【題解】Codeforces 1780F Three Chairs

題目連結

題目大意

給定一個長度為 $n$ 的數列 $a$,求:

$$\sum_{i = 0}^{n - 1} \sum_{j = i + 1}^{n - 1} \sum_{k = j + 1}^{n - 1} [\gcd(\min(a_i, a_j, a_k), \max(a_i, a_j, a_k)) = 1]$$

其中 $[P]$ 是艾佛森括號

  • $3 \leq n \leq 3 \cdot 10^5$
  • $1 \leq a_i \leq 3 \cdot 10^5$
  • $a_i \neq a_j, i \neq j$

觀察

$\mu$ 為莫比烏斯函數,具有以下的性質:
$$
\sum_{d | n} \mu(d) = [n = 1] =
\begin{cases}
0 & n \neq 1 \\
1 & n = 1
\end{cases}
$$

我們令 $A = \max(a)$ 為值域。
利用莫比烏斯函數的性質,我們可以把原本的式子轉換為:

$$
\begin{aligned}
&= \sum_{i = 0}^{n - 1} \sum_{j = i + 1}^{n - 1} \sum_{k = j + 1}^{n - 1} \sum_{d | \gcd(\min(a_i, a_j, a_k), \max(a_i, a_j, a_k))} \mu(d) \\
&= \sum_{d = 1}^{A} \mu(d) \sum_{i = 0}^{n - 1} \sum_{j = i + 1}^{n - 1} \sum_{k = j + 1}^{n - 1} ([d | \min(a_i, a_j, a_k)][d | \max(a_i, a_j, a_k)])
\end{aligned}
$$

可以發現後面那項其實就是在求有幾組 $i < j < k$ 滿足 $a_i < a_j < a_k$ 且 $a_i$ 和 $a_k$ 是 $d$ 的倍數,枚舉 $d$ 的倍數後可以輕易求出。

莫比烏斯函數可以用線性篩在 $O(A)$ 求出,而所有倍數的個數為 $\sum\limits_{d = 1}^{A} \lfloor \frac{A}{d} \rfloor \approx O(A \log A)$,總時間複雜度為 $O(n + A \log A)$。

Solution Code


【題解】Codeforces 1780F Three Chairs
https://fffelix-huang.github.io/posts/cf-1780f/
Author
老鼠
Posted on
January 27, 2023
Licensed under