题目描述
何老板给你两个整数 NN 和 KK ,他想让你找出所有满足下列条件的数字对 (a,b)(a,b) :
a % b≥ka % b≥k
1≤a,b≤N1≤a,b≤N
输出满足条件的数字对的个数。
输入格式
一行,两个整数 NN 和 KK
输出格式
一个整数,表示计算结果
样例数据
输入数据 1
5 2
Copy
输出数据 1
7
样例解释:
满足条件的数字对有(2,3),(5,3),(2,4),(3,4),(2,5),(3,5),(4,5)
Copy
输入数据 2
10 0
Copy
输出数据 2
100
Copy
输入数据 3
31415 9265
Copy
输出数据 3
287927211
Copy
提示
1≤N≤1051≤N≤105
0≤K≤N−10≤K≤N−1
#include<iostream>
using namespace std;
int main() {
int n, k;
cin >> n >> k;
long long ans;
if (k > n) {
ans = 0;
} else if (k == 0) {
ans = 1ll * n * n;
} else {
ans = (1ll + n - k) * (n - k) / 2;
for (int b = k + 1; b <= n; b++) {
int tot = (n - b + 1) / b;
if (tot > 0) {
ans += 1ll * tot * (b - k);
}
long long tot2 = tot + 1;
if (1ll * tot2 * b <= n) {
long long anss = 1ll * tot2 * b + k;
if (anss <= n) {
ans += (n - anss + 1);
}
}
}
}
cout << ans;
return 0;
}