题意简述
n∑i=1n∑j=1lcm(i,j)
n≤1010 (简短题意,恶臭规模)
思路
总的来说,就是先把式子变一变,然后巧妙的用欧拉函数 φ 加上杜教筛和整除分块来算。
变形
首先我们知道 lcm(a,b)=lcm(b,a)
所以,当 i≠j 时候,我们计算 j<i 的情况,然后 ×2 即可
对于 i=j 的情况特判,这时候产生的贡献和为 n(n+1)2
所以,答案化为
n∑i=1i−1∑j=1lcm(i,j)+n(n+1)2
我们都知道 lcm(i,j)=ijgcd(i,j)。这个再换一下即可。
开始硬♂上
开局一公式,结论全靠推。让我们开心的推倒式子吧~
首先枚举 gcd,然后枚举互质的倍数 i,j。
原式
=n∑d=1n/d∑i=1i∑j=1[gcd(i,j)=1]ijd
=n∑i=1i∑j=1[gcd(i,j)=1]ijn/i∑d=1d (枚举一对互质的 i,j ,计算有多少个 d 算到了这对 i,j,加起来)
设 Sk(n)=n∑i=1ik 。显然, k=1,2,3 时这个式子都能 O(1) 算。
接下来变成
=n∑i=1i∑j=1[gcd(i,j)=1]ijS1(n/i) (恭喜你少了一个 d)
考虑如何求 i∑j=1[gcd(i,j)=1]j,也就是求 i 以内和 i 互质的数的和。
它等于 12i×φ(i)。带入原式:
=n∑i=1i×S1(n/i)×i×φ(i)2 (恭喜你又少了一个 j,它现在是一维了)
=12n∑i=1i2φ(i)×S1(n/i)
S1(n/i) 显然可以整除分块,但是整除分块我们要考虑一个东西: 如何求 i2φ(i) 的前缀和?显然,用杜教筛求一下和即可。
总复杂度非常恐怖,但是的确能通过 n=1010 的数据。一定注意处处取膜