由题意包括的二元组只有(1+k+…+k,k)和(k的倍数,k)因为k不同,n固定,然后套用整除分块的模板就可以了。
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
typedef long long ll;
const ll mod=1e9+7;
int main(){
ll n,k;
scanf("%lld%lld",&n,&k);
ll ans=(n+k-1)%mod;
for(ll l=2,r;l<=min(k,n-1);l=r+1)
{
r=min((n-1)/((n-1)/l),k);
ans=(ans+(r-l+1)*((n-1)/l)%mod)%mod;
}
for(ll l=2,r;l<=min(k,n);l=r+1)
{
r=min(n/(n/l),k);
ans=(ans+(r-l+1)*(n/l)%mod)%mod;
}
printf("%lld\n",ans);
return 0;
}