一個有趣的問題
求一個
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;
}