/*
数论分块
计算sum(n/i) i = 1 ... n;
复杂度O(2*sqrt(n))
*/
#include <iostream>
using namespace std;
typedef long long ll;
ll cal(int n)
{
int r;
ll ans = 0;
for (int l = 1; l <= n; l = r + 1)
{
r = n / ( n / l ); //[l...n/(n/l)]这个区间的n/l都是一样的;
ans += ( r - l + 1 ) * (n / l);
}
return ans;
}
int main()
{
int n;
cin >> n;
cout << cal(n) << endl;
return 0;
}
数论分块
最新推荐文章于 2024-04-01 16:35:43 发布