spoj LCMSUM

[ans=nsum_{i=1}^ndfrac i{gcd(i,n)} ]

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

[ans=nsum_{jmid n}dfrac 1jsum_{i=1}^n[gcd(i,n)=j]i ]

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

[ans=nsum_{jmid n}dfrac 1jsum_{i=1}^{frac nj}left[gcd!left(i,dfrac nj ight)=1 ight]!ij ]

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

[egin{aligned}ans&=nsum_{jmid n}sum_{i=1}^{frac nj}left[gcd!left(i,dfrac nj ight)=1 ight]!i\&=nsum_{jmid n}sum_{i=1}^j[gcd(i,j)=1]iend{aligned} ]

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

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

[ans=nsum_{jmid n}sum_{i=1}^{j}isum_{kmid i,kmid j}mu(k) ]

交换 (sum)(老套路),然后一个 (k) 的贡献系数就是 (1sim j)(k) 的倍数和,容易算出 (dfrac{leftlfloordfrac jk ight floorleft(1+leftlfloordfrac jk ight floor ight)}2k)。但是有 (kmid j),所以取整直接拿掉, (dfrac{dfrac jkleft(1+dfrac jk ight)}2k=dfrac{jleft(1+dfrac jk ight)}2)

[ans=nsum_{jmid n}sum_{kmid j}mu(k)dfrac{jleft(1+dfrac jk ight)}2 ]

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

[ans=nsum_{jmid 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} imesepsilon)*1+(mathrm{id imesvarphi})*1}2)。两个都是积性函数卷积性函数,依然是积性函数,线性筛就行了。

珍爱生命,远离抄袭!
原文地址:https://www.cnblogs.com/ycx-akioi/p/solution-spoj-lcmsum.html