BZOJ 3944 Sum 解题报告
我们考虑令:
\[F_n = \sum_{d|n}\varphi(d)
\]
那么,有:
\[\sum_{i=1}^{n}F_i = \sum_{i=1}^{n}\sum_{d|i}\varphi(d) = \sum_{d=1}^{n}\varphi(d)\times \lfloor\frac{n}{d}\rfloor = \sum_{d=1}^{n}\sum_{i=1}^{\lfloor\frac{n}{d}\rfloor}\varphi(i)
\]
为什么最后一步可以这么转化呢?我们考虑一个 \(i\) ,论 \(\varphi(i)\) 对答案的贡献:
在最后一个等式的左边,\(\varphi(i)\) 对答案的贡献为:\(\lfloor\frac{n}{i}\rfloor\),这很显然。
在等式的右边,当 \(i\times d \le n\) 的时候,\(\varphi(i)\)才会对答案产生贡献,所以对于每一个 \(d\le\lfloor\frac{n}{i}\rfloor\),\(\varphi(i)\)都会对答案产生贡献,所以在等式右边,\(\varphi(i)\) 对答案的贡献也为:\(\lfloor\frac{n}{i}\rfloor\)。
于是等式是成立的。
那么就有:
\[\sum_{i=1}^{n}\varphi(i) = \sum_{i=1}^{n}\sum_{d|i}\varphi(d) - \sum_{d=2}^{n}\sum_{i=1}^{\lfloor\frac{n}{d}\rfloor}\varphi(i)
\]
还有:
\[\sum_{i=1}^{n}\sum_{d|i}\varphi(d) = \sum_{i=1}^{n}i = \frac{n\times(n+1)}{2}
\]
所以:
\[\sum_{i=1}^{n}\varphi(i) = \frac{n\times(n+1)}{2} - \sum_{d=2}^{n}\sum_{i=1}^{\lfloor\frac{n}{d}\rfloor}\varphi(i)
\]
所以算\(\sum_{i=1}^{n}\varphi(i)\)的时候就可以记忆化搜索啦。
据说,我们把 \(N^{\frac{2}{3}}\) 之内的答案先筛出来,然后再进行记忆化搜索,复杂度就是 \(O(N^{\frac{2}{3}})\)的了。
然后同理,有:
\[\sum_{i=1}^{n}\mu(i) = 1 - \sum_{d=2}^{n}\sum_{i=1}^{\lfloor\frac{n}{d}\rfloor}\mu(i)
\]
时空复杂度均为 \(O(N^{\frac{2}{3}})\) 。
毕竟 Gromah 这么弱,不可能自己推出来这些东西。
所以 Gromah 是参考了其他地方的博客的,比如: