老是不对,现在又卡在第12个点, 500000004 是 2 在模 1e9+7 意义下的逆元
代码如下:
#include <bits/stdc++.h>
#define int long long
using namespace std;
const int P=1e9+7;
int ads(int x,int y,int d) {
if(d==0) return x%P;
return (((x+y+P)%P+P)%P*(((y-x)/d%P+1+P)%P)+P)%P*500000004%P;
}
int H(int x,int y) {
int sum=0,l=1;
while(l<=y) {
int r=x/(x/l)+1;
r=min(r,y+1);
int len=r-l-1,k=x/l;
sum=(sum+ads(x%l-len*k,x%l,k)+P)%P;l=r;
}
return sum;
}
int n,k;
signed main() {
cin>>k>>n;
if(n<=k) cout<<(H(k,n)+P)%P<<endl;
else cout<<(H(k,k)%P+k*(n-k)%P+P)%P<<endl;
return 0;
}