如何快速计算sum i=1 to n int(n/i)

代码:

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} $ 种,所以我们只需要求出每一段的值在乘上这一段的个数,之后再对答案做出贡献就可以了。

猜你喜欢

转载自www.cnblogs.com/lixiao189/p/9495075.html