for(int i=1;i<=n;i++) ans+=n/i; 复杂度O(n)

下面代码复杂度为O( sqrt(n) )

long long getsum(long long nn)
{
    long long ans=0;
    long long tmp,r,l;
    for(long long i=nn;i>=1;)
    {
        tmp=nn/i;
        r=i;
        l=nn/(tmp+1)+1;
        ans+=(r-l+1)*tmp;
        i=nn/(tmp+1);
    }
    return ans;
}

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐