第 个式子
对于这样一个式子:
我们可以分段求和,我们发现 一共就只有 种取值,所以,我们可以根据每种取值已经这种取值的次数,算出对答案的贡献,从而得到答案。
for(int l=1,r;l<=n;l=r+1){
r=n/(n/l);//计算这种取值的右边界
ans+=(r-l+1)*(n/l);
}
第 个式子
对于这样一个式子:
跟上面同理,这个式子我们会去数论分块,大家可以结合代码理解,我就不详细讲了。
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);
}