網易2019:數對

題目:

牛牛以前在老師那裏得到了一個正整數數對(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;
}
發佈了200 篇原創文章 · 獲贊 740 · 訪問量 69萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章