浅尝辄止题解

【前言】
非常简单的数学题。

【暴力】
直接模拟即可,复杂度O(n)

【正解】
有很多项是完全相同且连续的,因此可以采用计算这一项出现了多少次来简化计算。
我们采用这样的做法,枚举1到x,计算以这个数作为答案被记录了多少次,这时我们就快速计算了很大一段的和,我们假设已经计算了y到n这几项的和,对于剩下的1到y-1,暴力。
可知y=[n/(x+1)]+1
我们来看复杂度,是O(x+n/(x+1))的,可以近似为O(x+n/x),根据基本不等式,x取图片说明 时达到最小。
所以最后复杂度为O(图片说明 ).

参考代码:

class Solution {
public:
    /**
     * 
     * @param n long长整型 
     * @return int整型
     */
    int work(long long n) {
        // write code here
        int ans=0;
        long long l=n;
        for (long long i=2;1ll*i*i<=n;i++) 
        {
            long long x=l-(n/i);
            ans=(ans+((i-1)*x%998244353))%998244353;
            l=n/i;
        }
        for (long long i=1;i<=l;i++) ans=(ans+(n/i)%998244353)%998244353;
        return ans;
    }
};
全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务