,是从,但是是,如果,那就是数论分块模板;如果,将直接修改为没有问题;如果,那么对于的这部分来说,的值为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 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;
}