莫比乌斯反演.
- 题面有误, $a$ 应该是 $1\sim n$ 的一个排列.因为这个卡了好久…
- 用 $\varphi$ 反演就很好做.
- $O(n)$ 大力枚举 $d$ ,因为 $a$ 是个排列,所以可以大力枚举集合中的每个数的约数,对 $1\sim n$ 中每个数记录一下有 $f(i)$ 个数是它的倍数,那么后面那坨就是 $\sum f(i)^2$ 了.
- 集合大小总和是个调和级数,总时间复杂度应该是 $O(nlog^3n)$ .
(其实我不会证)
直接 $memset$ 会 $T$ ,可能需要一点卡常的奇技淫巧.
1 |
|