代码:
int fuc(int n)
{
int now=1,ans=0,r; //now就是上一个位置答案的下一个位置
for(;now<=n;now=r+1){
r=n/(n/now);
ans+=(r-now+1)*(n/now);
}
return ans;
}
原理:
由于 int(n/i)
这个东西的取值只有近似于 $ \sqrt{n} $ 种,所以我们只需要求出每一段的值在乘上这一段的个数,之后再对答案做出贡献就可以了。