網易2019實習生招聘筆試-數對
阿新 • • 發佈:2019-02-06
牛牛以前在老師那裡得到了一個正整數數對(x, y), 牛牛忘記他們具體是多少了。
但是牛牛記得老師告訴過他x和y均不大於n, 並且x除以y的餘數大於等於k。牛牛希望你能幫他計算一共有多少個可能的數對。
輸入描述:
輸入包括兩個正整數n,k(1 <= n <= 10^5, 0 <= k <= n - 1)。
輸出描述:
對於每個測試用例, 輸出一個正整數表示可能的數對數量。
列舉每一個除數y,對於除數y來說,餘數為0-y-1的長度為y的迴圈節 因此迴圈部分有n/y*(y-k)個數對(對於被除數小於除數的情況下,有y-k個數對),非迴圈部分為n%y-k+1個數對,
最後考慮k=0的情況,很明顯是n*n個數對
#include <iostream> #include <cmath> #include <queue> #include <cstdio> #include <vector> #include <algorithm> #include <cstdlib> #define LL long long using namespace std; LL n,k,s; int main(){ LL count=0; cin>>n>>k; if(k==0){ count=n*n; } else{ for(LL i=k+1;i<=n;i++){ //count+=n-i; s=n/i; count+=s*(i-k); LL m = n%i; if(m>=k){ count+=m-k+1; } } } cout<<count<<endl; return 0; }