51Nod1220 约数之和

传送门

(懒得重写了……直接把51nod上我的那篇博客贴过来好了)
(注:以下出现的所有$\sigma_k(n)$均表示$\sum_{d|n}d^k$,即$n$的所有约数的$k$次幂之和)
\begin{align} Ans=&\sum_{i=1}^n\sum_{j=1}^n\sigma_1(i j) \end{align}
要化简这个式子首先要用到一个结论:
\begin{align} \sigma_1(i j)=\sum_{p|i}\sum_{q|j}[(p,q)=1]\frac{p j}q \end{align}
至于证明嘛,大致的思路就是每个质因子互相独立,因此对每个质因子分别考虑,把$i j$拆成$\prod p_i^{a_i+b_i}$的形式,最后化简得到这个结果
把这个结论代入原式,得到
 \begin{align} Ans=&\sum_{i=1}^n\sum_{j=1}^n\sigma_1(i j)\\ =&\sum_{i=1}^n\sum_{j=1}^n\sum_{p|i}\sum_{q|j}[(p,q)=1]\frac{p j}q\\ =&\sum_{d=1}^n\mu(d)\sum_{i=1}^n\sum_{j=1}^n\sum_{p|i}\sum_{q|j}[d| (p,q)]\frac{p j}q\qquad(莫比乌斯反演)\\ =&\sum_{d=1}^n\mu(d)\sum_{d|p}\sum_{d|q}\frac p q\sum_{p|i}\sum_{q|j}j\\ =&\sum_{d=1}^n\mu(d)\sum_{d|p}\sum_{d|q}\frac p q\left\lfloor\frac n p\right\rfloor q\frac{\left\lfloor\frac n q\right\rfloor\left(\left\lfloor\frac n q\right\rfloor+1\right)}2\\ =&\sum_{d=1}^n\mu(d)\sum_{d|p}p\left\lfloor\frac n p\right\rfloor\sum_{d|q}\frac{\left\lfloor\frac n q\right\rfloor\left(\left\lfloor\frac n q\right\rfloor+1\right)}2\\ =&\sum_{d=1}^n\mu(d)d\left(\sum_{p=1}^{\left\lfloor\frac n d\right\rfloor}p\left\lfloor\frac n{d p}\right\rfloor\right)\left(\sum_{q=1}^{\left\lfloor\frac n d\right\rfloor}\frac{\left\lfloor\frac n{d q}\right\rfloor\left(\left\lfloor\frac n{d q}\right\rfloor+1\right)}2\right) \end{align}
这个式子已经是分块形式了,现在只需要快速求出$\mu(d)$和后面那两个东西的前缀和即可
先看一看后面的东西是什么,为了方便起见,先把$\left\lfloor\frac n d\right\rfloor$换成$n$,也就是说求这两个东西:
 \begin{align} &\sum_{i=1}^n i\left\lfloor\frac n i\right\rfloor\\ &\sum_{i=1}^n\left\lfloor\frac n i\right\rfloor\left(\left\lfloor\frac n i\right\rfloor+1\right) \end{align}
先看前面那个东西,注意到$\left\lfloor\frac n d\right\rfloor$的实际意义就是$\le n$的所有数中是$i$的倍数的数的个数,不难得到
 \begin{align} \sum_{i=1}^n i\left\lfloor\frac n i\right\rfloor=\sum_{i=1}^n\sigma_1(i) \end{align}
然后考虑后面那个东西,可以对它进行一些简单的变形:
 \begin{align} &\sum_{i=1}^n\left\lfloor\frac n i\right\rfloor\left(\left\lfloor\frac n i\right\rfloor+1\right)\\ =&\sum_{i=1}^n\sum_{j=1}^{\left\lfloor\frac n i\right\rfloor}j\\ =&\sum_{j=1}^n j\sum_{i=1}^{\left\lfloor\frac n j\right\rfloor}1\\ =&\sum_{i=1}^n i\left\lfloor\frac n i\right\rfloor \end{align}
发现它跟上一个东西是一样的,因此
 \begin{align} Ans=\sum_{d=1}^n\mu(d)d\left(\sum_{i=1}^{\left\lfloor\frac n i\right\rfloor}\sigma_1(i)\right)^2 \end{align}
(ps:结果如此简洁)
现在只需要求出$\mu(d)d$和$\sigma_1(i)$的前缀和就行了,设$f(d)=\mu(d)d$,则有$f*id=e$(写成代数形式就是$\sum_{d|n}df(\frac n d)=[n=1]$,这个不难验证),因此
 \begin{align} S_f(n)=1-\sum_{d=2}^n d S_f\left(\left\lfloor\frac n d\right\rfloor\right) \end{align}
直接上杜教筛即可。
至于$\sigma_1(i)$的前缀和,可以用和杜教筛类似的思路,先用线性筛预处理出前$n^{\frac 2 3}$项,后面的$n^{\frac 1 3}$项直接用原来的那个$\sum_{i=1}^n\sigma_1(i)=\sum_{i=1}^n i\left\lfloor\frac n i\right\rfloor$算即可,单次计算是$\sqrt n$的,复杂度和杜教筛的分析类似,最后可以得到复杂度和杜教筛相同,都是$O(n^{\frac 2 3})$。
注意杜教筛自带分块形式,因此外面套一层分块不会影响复杂度,总复杂度仍为$O(n^{\frac 2 3})$。

posted @ 2017-06-03 16:41  AntiLeaf  阅读(1383)  评论(1编辑  收藏  举报