一个有趣的问题
求一个
1.最多只有2种取值不同
2.设 与相等,则i'的最大值为
证明不证
所以 我们就可以设置两个指针L R, L初值赋值为1,每次令R=,将(R-L+1)*累加在答案中去,再令L=R+1
即可得到答案 因为最多只有2种取值,所以时间复杂度为O()
代码如下:
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define db double
#define MAX 1000000
#define rep(i,j,k) for(int i=(int)(j);i<=(int)(k);i++)
#define per(i,j,k) for(int i=(int)(j);i>=(int)(k);i--)
int main()
{
//求n/i的和
// 时间复杂度为根号N
ll N = 100000000000;
ll l, r;
ll sum = 0;
for (l = 1; l <= N; l = r + 1) {
r = N / (N / l);
sum += (r - l + 1)*(N / l);
}
cout << sum << endl;
system("pause");
return 0;
}