#include<bits/stdc++.h>
using namespace std;
#define endl '\n'
#define int long long
#define IOS ios::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL);
#define HelloWorld IOS;
signed main(){
HelloWorld;
int n, k; cin >> n >> k;
int sum = n * k;
for(int i = 1; i <= min(k, n); i ++){
int l = i, r = (k / (k / i));
int len = r - l + 1;
sum -= (i + i + len - 1) * len / 2 * (k / i);
i = r;
}
cout << sum << endl;
return 0;
}
但是上面的代码是错的
原因在于
循环中的
是做边界,当然
没有问题,但是忘记了考虑右边界的情况,得加上
才正确
总代码:
#include<bits/stdc++.h>
using namespace std;
#define endl '\n'
#define int long long
#define IOS ios::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL);
#define HelloWorld IOS;
signed main(){
HelloWorld;
int n, k; cin >> n >> k;
int ans = n * k;
for(int i = 1; i <= min(n, k); i ++){
int l = i, r = k / (k / i);
r = min({r, k, n});
int len = r - l + 1;
ans -= (i + i + len - 1) * len / 2 * (k / i);
i = r;
}
cout << ans << endl;
return 0;
}



京公网安备 11010502036488号