题目描述
牛牛以前在老师那里得到了一个正整数数对(x, y), 牛牛忘记他们具体是多少了。
但是牛牛记得老师告诉过他x和y均不大于n, 并且x除以y的余数大于等于k。
牛牛希望你能帮他计算一共有多少个可能的数对。
输入描述:
输入包括两个正整数n,k(1 <= n <= 10^5, 0 <= k <= n - 1)。
题目链接:
输出描述:
对于每个测试用例, 输出一个正整数表示可能的数对数量。
示例1
输入
5 2
输出
7
说明
满足条件的数对有(2,3),(2,4),(2,5),(3,4),(3,5),(4,5),(5,3)
分析:
1 // 数学 2 3 #include <bits/stdc++.h> 4 using namespace std; 5 6 int main() 7 { 8 int n, k; 9 cin >> n >> k; 10 long long int sum = 0; // int放不下,存到long long int中 11 if (k == 0) 12 sum = (long long int)n * n; // 转为long long int 13 else 14 for (int y = k + 1; y <= n; y++) 15 sum += (n / y) * (y - k) + max(0, n % y - k + 1); // n里边有几对循环节,每节里边有(y-k)个可以 + 多余部分非循环借是否有满足条件的 16 cout << sum << endl; 17 return 0; 18 }