原来可以用分块啊
水灵灵的做法:
#include <bits/stdc++.h>
using namespace std;
int main() {long long n,k;scanf("%lld%lld",&n,&k);long long ans=n*k;for(long long l=1,r;l<=n;l=r+1) {if(k/l!=0) r=min(k/(k/l),n); //关键:如果它会减小x次,那么x值为当前l的有k/(k/l)个,原因自己想else r=n;//易得ans-=(k/l)*(r-l+1)*(l+r)/2;//等差数列(doge}printf("%lld",ans);return 0;
}