1 条题解
-
-8
本题的定位不是难题,旨在帮助选手追忆基本的计数技巧,虽然正赛已有多年没考如此传统的计数,但适当练练还是有用的。
本题的出题灵感来自下面这个广为人知的式子:
$$\sum_{i=1}^n \mu^2(i) = \sum_{i=1}^n \mu(i) \lfloor \dfrac{n}{i^2} \rfloor $$其中,等式左边的意义是计算 中无大于 的平方因子的数的个数,而右边则是考虑对每个数的平方因子进行容斥,枚举每个数的某一个平方因子 ,统计所有 的倍数,再带个 的容斥系数。容易发现,对于一个数 ,满足 ,则右式
会将其统计 次,正好符合左式的计数意义。
很容易将其推广到特殊性质 B,注意到性质 B 实际上就是算
则上式 $=\sum_{i=1}^n \mu(i) \sum_{i^2 | x} x^k = \sum_{i=1}^n \mu(i)i^{2k}S(\lfloor \dfrac{n}{i^2} \rfloor)$
其中 为自然数等幂和。
那么对于一般情况呢?注意到上面的容斥其实只是莫比乌斯反演的特殊情形,我们完全可以利用 Dirichlet 积与反演工具,手动构造容斥系数。
具体地,我们构造一个序列 使得 。
则
$$\begin{aligned}\sum_{i = 1}^n a_{v(i)}i^k &= \sum_{i = 1}^n \sum_{d | v(i)} b_d i^k \\&= \sum_{i=1}^n\sum_{d^2 | i} b_di^k \\&= \sum_{d = 1}^{\lfloor \sqrt n \rfloor}b_dd^{2k}S(\lfloor \dfrac{n}{d^2} \rfloor) \end{aligned} $$上面利用到了 的数论事实,将 作质因数分解即可证明。
那如何得到这个序列 ?注意到 ,那么 ( 为 Dirichlet 卷积),可以在 或 的时间内得到序列 。
现在问题归结为如何对 算 。
我们知道,利用拉格朗日插值,单个 容易在 时间算出,但我们没必要对每个 都这么算,可以在 较小时直接预处理 。 标程中选择在 时预处理 ,这样只需要对 个 进行拉格朗日插值,总时间复杂度 ,可以通过本题。(注意使用线性筛来做到 预处理 ,不要直接使用快速幂)
注:本题还有一种化式子的方法,可以得到一种更复杂的做法:
$\sum_{i=1}^n a_{v(i)}i^k = \sum_{d = 1}^{\lfloor \sqrt n \rfloor} a_dd^{2k} \sum_{i=1}^{\lfloor \frac{n}{d^2} \rfloor} \mu^2(i)i^k$
令 ,显然其是积性函数,且满足用 min_25 筛求前缀和的条件,故可以用 min_25 筛算出 $\sum_{i=1}^{\lfloor \frac{n}{d^2} \rfloor} \mu^2(i)i^k$
但 min_25 筛要求对每个 算出 ,且筛法本身复杂度为 ,导致总体时间复杂度稍劣。
- 1
信息
- ID
- 11
- 时间
- 3000ms
- 内存
- 1024MiB
- 难度
- 9
- 标签
- 递交数
- 547
- 已通过
- 48
- 上传者