浅尝辄止题解
【前言】
非常简单的数学题。
【暴力】
直接模拟即可,复杂度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;
}
};

查看10道真题和解析