题意简述
$\sum\limits_{i=1}^{n}\sum\limits_{j=1}^{n} \operatorname{lcm}(i,j)$
$n\le 10^{10}$ (简短题意,恶臭规模)
思路
总的来说,就是先把式子变一变,然后巧妙的用欧拉函数 $\varphi$ 加上杜教筛和整除分块来算。
变形
首先我们知道 $\operatorname{lcm}(a,b)=\operatorname{lcm}(b,a)$
所以,当 $i\not=j$ 时候,我们计算 $j<i$ 的情况,然后 $\times 2$ 即可
对于 $i=j$ 的情况特判,这时候产生的贡献和为 $\dfrac{n(n+1)}{2}$
所以,答案化为
$\sum\limits_{i=1}^{n}\sum\limits_{j=1}^{i-1} \operatorname{lcm}(i,j) + \dfrac{n(n+1)}{2}$
我们都知道 $\operatorname{lcm}(i,j)=\dfrac{ij}{\gcd(i,j)}$。这个再换一下即可。
开始硬♂上
开局一公式,结论全靠推。让我们开心的推倒式子吧~
首先枚举 $gcd$,然后枚举互质的倍数 $i,j$。
原式
$=\sum\limits_{d=1}^{n}\sum\limits_{i=1}^{n/d}\sum\limits_{j=1}^{i} [\gcd(i,j)=1] ijd$
$=\sum\limits_{i=1}^{n}\sum\limits_{j=1}^{i} [\gcd(i,j)=1] ij \sum\limits_{d=1}^{n/i} d$ (枚举一对互质的 $i,j$ ,计算有多少个 $d$ 算到了这对 $i,j$,加起来)
设 $S_k(n)=\sum\limits_{i=1}^{n} i^k$ 。显然, $k=1,2,3$ 时这个式子都能 $O(1)$ 算。
接下来变成
$=\sum\limits_{i=1}^{n}\sum\limits_{j=1}^{i}[\gcd(i,j)=1] ij S_1(n/i)$ (恭喜你少了一个 $d$)
考虑如何求 $\sum\limits_{j=1}^{i} [\gcd(i,j)=1]j$,也就是求 $i$ 以内和 $i$ 互质的数的和。
它等于 $\dfrac{1}{2}i\times \varphi(i)$。带入原式:
$=\sum\limits_{i=1}^{n} i\times S_1(n/i) \times \dfrac{i\times \varphi(i)}{2}$ (恭喜你又少了一个 $j$,它现在是一维了)
$=\dfrac{1}{2}\sum\limits_{i=1}^{n} i^2\varphi(i)\times S_1(n/i)$
$S_1(n/i)$ 显然可以整除分块,但是整除分块我们要考虑一个东西: 如何求 $i^2\varphi(i)$ 的前缀和?显然,用杜教筛求一下和即可。
具体怎么杜教筛 (老样子,会的跳过)
设 $f(n)=n^2\varphi(n)$
关键就是要配一个好算的 $g$ ,使得 $f\times g$ 也是一个好算的函数 $h$。
由狄利克雷卷积的定义,
$h(n)=\sum\limits_{d|n} f(d)g(\dfrac{n}{d})$
$=\sum\limits_{d|n} d^2\varphi(i)g(\dfrac{n}{d})$
我们发现,令 $g(n)=n^2$,就能消掉一个 $d^2$,原式继续变成:
$=\sum\limits_{d|n} n^2\varphi(i)$ (注意 $g(\dfrac{n}{d})$ 头顶上还有一个 $n$,乘出来变成 $n^2$)
=$n^2\sum\limits_{d|n} varphi(d)=n^3$
所以说, $h(n)=f\times (g(n)=n^2)=(n^3)$
然后用杜教筛的传统艺能就行了。
总复杂度非常恐怖,但是的确能通过 $n=10^10$ 的数据。一定注意处处取膜
代码
1 |
|