題目:
牛牛以前在老師那裏得到了一個正整數數對(x, y), 牛牛忘記他們具體是多少了。
但是牛牛記得老師告訴過他x和y均不大於n, 並且x除以y的餘數大於等於k。
牛牛希望你能幫他計算一共有多少個可能的數對。
輸入描述:
輸入包括兩個正整數n,k(1 <= n <= 10^5, 0 <= k <= n - 1)。
輸出描述:
對於每個測試用例, 輸出一個正整數表示可能的數對數量。
輸入例子1:
5 2
輸出例子1:
7
例子說明1:
滿足條件的數對有(2,3),(2,4),(2,5),(3,4),(3,5),(4,5),(5,3)
鏈接:
牛客網:
思路標籤:
- 數學問題
解答:
- 暴力求解的時間複雜度非常高。
- 從題目中的約束規律,我們可以得出這是一道數學求解的題目。
- y必然大於k(y>k),x必然不小於k(x>=k),纔可能產生不小於k的餘數;
- x可以表示爲:x = i*y + k’ (0
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main()
{
int n, k;
cin >> n;
cin >> k;
long sumCount = 0;
int factor = 1;
if (k == 0){
cout << (long)n*n;
return 0;
}
for (int y = k + 1; y <= n; y++) {
factor = n / y;
sumCount += factor * (y - k);
sumCount += max(0, n - (factor*y + k) + 1);
}
cout << sumCount << endl;
return 0;
}