網易前端筆試程式設計題——數對
阿新 • • 發佈:2019-01-06
題目大意
牛牛以前在老師那裡得到了一個正整數數對(x, y), 牛牛忘記他們具體是多少了。
但是牛牛記得老師告訴過他x和y均不大於n, 並且x除以y的餘數大於等於k。
牛牛希望你能幫他計算一共有多少個可能的數對。
輸入描述
輸入包括兩個正整數n,k(1 <= n <= 10^5, 0 <= k <= n - 1)。
輸出描述
對於每個測試用例, 輸出一個正整數表示可能的數對數量。
輸入樣例
5 2
輸出樣例
7
樣例說明
滿足條件的數對有(2,3),(2,4),(2,5),(3,4),(3,5),(4,5),(5,3)
題解
這道題在筆試的時候沒有寫出來。。。。因為後面還有兩道問答題。所以還是放棄了,結果問答題也不會。。。其實這道題當時思路已經基本對了,加上一著急,就GG了。。千言萬語匯成一句話:怪我太渣。。。考完之後想了想,然後AC了。就是一個迴圈節,找到了規律就好了。網易爸爸,我還會再來的。。。
AC程式碼:
#include<iostream>
using namespace std;
int main(){
long long n , k;
long long ans = 0;
cin >> n >> k;
if (k == 0){
cout << n * n << endl;
return 0;
}
for(long long i = k + 1;i <= n;i++){
ans += (n / i) * (i - k); //找前(n / i * i)個數裡面有幾個迴圈節,每一個節有(i - k)個數
if(n % i >= k){
ans += n % i - k + 1;//剩下的數不足一個迴圈節,找第(n / i * i + 1 , n)裡面有幾個數滿足題意
}
}
cout << ans << endl;
return 0;
}