着实被这个题恶心到了一小下,玄学复杂度不解释。
Description
你有一个长度为 $n$ 的数组 $a_n$,你并不知道 $a_n$ 具体是什么,但是你知道对于 $\forall d \leq n$,满足 $\sum\limits_{i = 1}^{\frac nd}a_{id} = \mu(d)$,问你 $a_m$ 的值。
(以上包括以下的除法皆为向下取整)。
Solution
一看到成倍数的容斥就直接上 $\mu$ 函数就可以了,如果你对这个并不了解我们可以这样处理。
我们设 $f(n) = a_n$,显然有:
$$ f(m) = \sum_{i = 1}^{\frac nm}f(im)[i == 1] $$
$$ = \sum_{i = 1}^{\frac nm} f(im)\sum_{d|i}\mu(d)$$
$$ = \sum_{d = 1}^{\frac nm}\mu(d)\sum_{i = 1}^{\frac n{md}}f(imd) $$
$$ = \sum_{d = 1}^{\frac nm}\mu(d)\mu(md) $$
然后我们考虑如何求这一个东西,对于函数 $\mu$,我们有
$$ \mu(md) = \mu(m)\mu(d)[(m,d) = 1] $$
其中 $(m,d)$ 代表 $m$ 和 $d$ 的最大公约数。
那么我们直接替换 $\mu(md)$ 可以得到:
$$ f(m) = \mu(m)\sum_{d = 1}^{\frac nm}\mu(d)^2[(m,d) = 1]$$
那么我们现在就要求后边这一坨东西,我们首先能想到的是只要 $\mu(d) = 1$ 的充要条件是 $d$ 不包含平方数因子,那么我们可以枚举所有的平方数因子进行容斥,这样只需要枚举到根号即可,具体地,我们设 $t = \frac nm$,$st = \sqrt{t}$。
$$ f(m) = \mu(m)\sum_{i = 1}^{st}\mu(i)\sum_{j = 1}^{\frac t{i^2}}[(i^2j,m)=1] $$
在这里我们的 $i^2$ 就是我们枚举的平方数因子,$\mu(i)$ 是容斥的系数,后边的 $i^2j$ 枚举的就是含有 $i^2$ 作为因子的每一个数。
那么我们可以熟练地对后边的那一坨进行莫比乌斯反演的套路操作,转化为:
$$ f(m) = \mu(m)\sum_{i = 1}^{st}\mu(i)\sum_{d|m}\mu(d)\frac t{i^2d} $$
然后这个东西我们是可以直接计算的,事先处理好 $m$ 的每个因数 $d$ 与 $\mu(d)$ 的值,然后进行复杂度为 $O(\alpha\sqrt \frac nm)$ 的计算,在这里 $\alpha$ 指 $m$ 的因数个数,据统计再 $1 \leq m \leq 10^9$ 的条件下这个 $\alpha$ 最大为 $1300$ 左右,足够通过本题。
Demonstration
1 |
|