题目链接
https://www.lydsy.com/JudgeOnline/problem.php?id=1257
分析
k m o d i = k − i × ⌊ k i ⌋ k \ \ mod \ \ i = k - i \times \lfloor {k \over i} \rfloor k mod i=k−i×⌊ik⌋,则要求 n × k − ∑ i = 1 n i × ⌊ k i ⌋ n \times k - \sum_{i = 1}^n i \times \lfloor {k \over i} \rfloor n×k−∑i=1ni×⌊ik⌋。
套用整除分块,注意 k k k 和 n n n 的大小。
AC代码
#include <cstdio>
#include <algorithm>
using namespace std;
inline int read() {
int num = 0;
char c = getchar();
while (c < '0' || c > '9') c = getchar();
while (c >= '0' && c <= '9')
num = num * 10 + c - '0', c = getchar();
return num;
}
int main() {
int n = read(), k = read();
long long ans = 1ll * n * k;
for (int l = 1, r; l <= n; l = r + 1) {
r = k / l ? min(k / (k / l), n) : n;
ans -= 1ll * (l + r) * (r - l + 1) / 2 * (k / l);
}
printf("%lld", ans);
return 0;
}