1. 程式人生 > >【51nod】1238 最小公倍數之和 V3

【51nod】1238 最小公倍數之和 V3

sum ron 前綴和 body var rac style str 算法

【題意】給定n,求Σi=1~nΣj=1~n lcm(i,j),n<=10^10。

【算法】杜教篩

【題解】

$ans=\sum_{i=1}^{n}\sum_{j=1}^{i}lcm(i,j)$

令$g(n)=\sum_{i=1}\frac{n*i}{(n,i)}$,則要求g(n)的前綴和。

$g(n)=n\sum_{d|n}\sum_{i=1}^{n}\frac{i}{d}[(n,i)=d]$

$g(n)=n\sum_{d|n}\sum_{i=1}^{n/d}i[(n/d,i)=1]$

$g(n)=n\sum_{d|n}\frac{d*\varphi(d)+[n=1]}{2}$

$g(n)=n/2*(1+\sum_{d|n}\varphi(d)*d)$

現在只需要求$\sum_{d|n}\varphi(d)*d$的前綴和s(n)

冪函數和冪函數卷積有奇效。

【51nod】1238 最小公倍數之和 V3