数论分块:求n/1+n/2+n/3+…+n/k的和
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
#define ll long long
ll mod=1e9+7;
int main()
{
ll n,k;
scanf("%lld%lld",&n,&k);
ll ans=(n+k-1)%mod;
ll gx;
for(ll i=2;i<=k;i=gx+1)
{
gx=n/i?min(k,n/(n/i)):k;
ans+=(gx-i+1)%mod*(n/i)%mod;
ans%=mod;//一定要模
}
n--;
for(ll i=2;i<=k;i=gx+1)
{
gx=n/i?min(k,n/(n/i)):k;
ans+=(gx-i+1)%mod*(n/i)%mod;
ans%=mod;//一定要模
}
printf("%lld\n",ans);
}