题意
求 $\sum_{i=a}^b \sum_{j=1}^i \frac{lcm(i,j)}{i}$.
分析
只需要求出前缀和,
$$\begin{aligned}
\sum_{i=1}^n \sum_{j=1}^i \frac{lcm(i,j)}{i} &= \sum_{i=1}^n \sum_{j=1}^i \frac{j}{gcd(i,j)} \\
&= \sum_{d=1}^n \sum _{i=1}^n \sum_{j=1}^i \frac{j}{d} \cdot [gcd(i,j)=1] \\
&= \sum_{d=1}^n \sum_{i=1}^{\left \lfloor \frac{n}{d} \right \rfloor} \sum_{j=1}^i j \cdot [gcd(i,j)=1]
\end{aligned}$$
其后面部分提出来,即求 $\sum_{i=1}^n i\cdot [gcd(i,n)=1]$,对于这种一个值固定的gcd求和有一个套路,即倒序两两配对:
若 $n=1$,和为1;
若 $n>1$,因为 $gcd(i, n) = gcd(n-i, n)$ 且 $\displaystyle \sum_{i=1}^n i\cdot [gcd(i,n)=1] = \sum_{i=1}^{n-1} i\cdot [gcd(i,n)=1]$,
$\displaystyle \sum_{i=1}^{n-1} i \cdot [gcd(i,n)=1] + \sum_{i=n-1}^1i\cdot [gcd(i,n)=1] = n\varphi (n)$,所以和为 $ n\varphi (n) /2$.
综合得 $\displaystyle \sum_{i=1}^n i\cdot [gcd(i,n)=1] = \frac{n\varphi (n)+[n=1]}{2}$.
具体实现上,$[i=1]$ 只成立 $n$,除2可以提出来,即 原式 = $\displaystyle \frac{1}{2}(\sum_{d=1}^n \sum_{i=1}^{\left \lfloor \frac{n}{d} \right \rfloor} i\varphi (i) + n)$.
现在唯一得问题是如何求 $\displaystyle S(n) = \sum_{i=1}^n i\varphi (i)$.
根据杜教筛,
设 $\displaystyle S(n) = \sum_{i=1}^n f(i)$,$f(n) = n\varphi (n), \ g(n) = n$.
$\displaystyle f*g = \sum_{d|n} d \varphi (d) \cdot \frac{n}{d} = n\sum_{d|n}\varphi (d) = n^2$.
因此 $\displaystyle S(n) = \sum_{i=1}^n i^2 - \sum_{d=2}^n d\cdot S(\left \lfloor \frac{n}{d} \right \rfloor)$.
再最外层套个数论分块即可。
代码
#include#include #include #include
参考链接:
1. https://blog.csdn.net/FromATP/article/details/74999989
2. https://www.cnblogs.com/owenyu/p/7397687.html