第 1 1 1 个式子
对于这样一个式子:
∑ i = 1 n ⌊ n i ⌋ \sum_{i=1}^{n}\lfloor \frac{n}{i}\rfloor i=1∑n⌊in⌋
我们可以分段求和,我们发现 ⌊ n i ⌋ \lfloor \frac{n}{i}\rfloor ⌊in⌋ 一共就只有 n \sqrt{n} n 种取值,所以,我们可以根据每种取值已经这种取值的次数,算出对答案的贡献,从而得到答案。
for(int l=1,r;l<=n;l=r+1){
r=n/(n/l);//计算这种取值的右边界
ans+=(r-l+1)*(n/l);
}
第 2 2 2 个式子
对于这样一个式子:
∑ i = 1 min ( a , b ) ⌊ n i ⌋ ⌊ m i ⌋ \sum_{i=1}^{\min(a,b)}\lfloor \frac{n}{i}\rfloor \lfloor \frac{m}{i}\rfloor i=1∑min(a,b)⌊in⌋⌊im⌋
跟上面同理,这个式子我们会去数论分块,大家可以结合代码理解,我就不详细讲了。
for(int l=1,r;l<=min(n,m);l=r+1){
r=min(n/(n/l),m/(m/l));//计算这种取值的右边界
ans+=(r-l+1)*(n/l)*(m/l);
}