我们知道\(a\%b = a - \lfloor\frac{a}{b}\rfloor*b\)。
打个表看看。
取\(k=5,n=8\)好了。
i=1 | i=2 | i=3 | i=4 | i=5 | i=6 | i=7 | i=8 |
---|---|---|---|---|---|---|---|
5 | 2 | 1 | 1 | 1 | 0 | 0 | 0 |
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll n, k, ans;
int main()
{
scanf("%lld%lld", &n, &k);
ans += n * k;
for(ll l = 1, r; l <= n; l = r + 1)
{
if(k / l != 0) r = min(k/(k/l), n);
else r = n; //当左端点大于k的时候,直接跳过
ans -= (r-l+1) * (l+r)/2 * (k/l);
} puts("");
printf("%lld\n", ans);
return 0;
}
原文:https://www.cnblogs.com/zxytxdy/p/12164435.html