题目链接
题解
∑i=1nk mod i=n×k−∑i=1ni×⌊ki⌋
∑
i
=
1
n
k
m
o
d
i
=
n
×
k
−
∑
i
=
1
n
i
×
⌊
k
i
⌋
而 ⌊ki⌋ ⌊ k i ⌋ 只有 O(k√) O ( k ) 种取值,所以直接数论分块即可。
代码
#include <cstdio>
long long n, m, ans;
long long min(long long x, long long y) {
return x < y ? x : y;
}
int main() {
scanf("%lld %lld", &n, &m), ans = n * m;
for (int i = 1, j; i <= n; i = j + 1) {
j = m / i ? min(m / (m / i), n) : n;
ans -= (m / i) * (i + j) * (j - i + 1) / 2;
}
printf("%lld\n", ans);
return 0;
}