spoj LCMSUM - LCM Sum

\[ans=n\sum_{i=1}^n\dfrac i{\gcd(i,n)} \]

这个 gcd 在分母上面很讨厌,考虑以它为贡献体贡献(由于 gcd 的一个元 \(n\) 是常数,所以可以确定 gcd 整除 \(n\),这样会有很多方便)。

\[ans=n\sum_{j\mid n}\dfrac 1j\sum_{i=1}^n[\gcd(i,n)=j]i \]

按 P2522 的套路把 gcd 要等于的值弄成 \(1\)(由于 \(j\mid n\),所以 \(\sum\) 的上界不需要取整)。

\[ans=n\sum_{j\mid n}\dfrac 1j\sum_{i=1}^{\frac nj}\left[\gcd\!\left(i,\dfrac nj\right)=1\right]\!ij \]

噫,好,这 \(\dfrac 1j\) 直接约掉了,然后再根据对称性化简一下。

\[\begin{aligned}ans&=n\sum_{j\mid n}\sum_{i=1}^{\frac nj}\left[\gcd\!\left(i,\dfrac nj\right)=1\right]\!i\\&=n\sum_{j\mid n}\sum_{i=1}^j[\gcd(i,j)=1]i\end{aligned} \]

第二个 \(\sum\) 看起来跟 \(\varphi\) 有关系。考虑从意义上来想,对 \(j>1\),互质的数是成对出现的,若 \(i\) 互质,\(j-i\) 也互质,一对的和为 \(j\)\(\dfrac j2\) 也不用担心,算作半对来考虑,那么这个和式就等于 \(\dfrac{\varphi(j)j}2\)。 对 \(j=1\) 由于自己和自己互质了,单独考虑开来答案为 \(1\)

但是我们用推柿子把它推出来。考虑把 \([?=1]\)\(\mu*1\) 展开。

\[ans=n\sum_{j\mid n}\sum_{i=1}^{j}i\sum_{k\mid i,k\mid j}\mu(k) \]

交换 \(\sum\)(老套路),然后一个 \(k\) 的贡献系数就是 \(1\sim j\)\(k\) 的倍数和,容易算出 \(\dfrac{\left\lfloor\dfrac jk\right\rfloor\left(1+\left\lfloor\dfrac jk\right\rfloor\right)}2k\)。但是有 \(k\mid j\),所以取整直接拿掉, \(\dfrac{\dfrac jk\left(1+\dfrac jk\right)}2k=\dfrac{j\left(1+\dfrac jk\right)}2\)

\[ans=n\sum_{j\mid n}\sum_{k\mid j}\mu(k)\dfrac{j\left(1+\dfrac jk\right)}2 \]

\(\dfrac j2\) 看成常系数,括号拆开,那么第二个 \(\sum\) 其实就是个 \((\mu*1+\mu*\mathrm{id})(j)\)。恰巧这两个狄卷都是可以算的,等于 \(\epsilon+\varphi\)。那么

\[ans=n\sum_{j\mid n}\dfrac j2(\epsilon(j)+\varphi(j)) \]

到这一步直接算是枚举因数,根号的复杂度。不过可以预处理的话是线对的调和级数复杂度,或者可以看成 \(f(x)=\dfrac x2(\epsilon(x)+\varphi(x))\) 时的 \((f*1)(n)\),狄卷暴力算就是线对的。那直接算就可以了。

code

upd:乘法分配律拆进去,\((f*1)=\dfrac{(\mathrm{id}\times\epsilon)*1+(\mathrm{id\times\varphi})*1}2\)。两个都是积性函数卷积性函数,依然是积性函数,线性筛就行了。

posted @ 2021-02-15 13:10  ycx060617  阅读(116)  评论(0编辑  收藏  举报