題目描述
牛牛以前在老師那裡得到了乙個正整數數對(x, y), 牛牛忘記他們具體是多少了。
但是牛牛記得老師告訴過他x和y均不大於n, 並且x除以y的餘數大於等於k。
牛牛希望你能幫他計算一共有多少個可能的數對。
輸入描述:
輸入包括兩個正整數n,k(1 <= n <= 10^5, 0 <= k <= n - 1)。
輸出描述:
對於每個測試用例, 輸出乙個正整數表示可能的數對數量。
輸入
5 2
輸出
7
說明暴力巢狀兩重迴圈,複雜度太高,105的資料範圍肯定是過不去,找規律把前面的數比後面的數小的部分給先算出來,只迴圈後面數比前面數小的情況,試一試,時間也過不去,那只能從數學上找一找規律了;滿足條件的數對有(2,3),(2,4),(2,5),(3,4),(3,5),(4,5),(5,3)
首先說這個餘數,假設這個數對是(x,y);那麼要保證x%y >= k 那麼必然 y要大於等於 k + 1 ;
下面對每乙個確定的y,來看在1-n範圍內的 x。在這個範圍內開始取餘數,當然 在範圍足夠大的情況下,餘數肯定是有規律的迴圈出現的(1,2,3, … , y-1 ,0);
那麼他會這麼迴圈多少次呢?他會迴圈(n / y)次;每次迴圈有多少符合條件的呢?會有(y - k)個符合條件(因為要求的是 x % y >= k, 就是說餘數等於k的是包含在內的,我們把0看作是每次餘數迴圈的第乙個,這樣如果k是2,我們減去k就是減去了餘數是0, 1這兩個不符合條件的)
然後再看還可能會有不夠一次迴圈的情況出現,那麼不夠一次迴圈,他剩下了多少個呢?剩下了(n % k)個,有多少個不符合條件的呢,有(k - 1)個,剛才是把0放到最上面計算了,但是現在沒有那個0了,所以少了乙個
**如下:
#include
#include
#include
#include
using
namespace std;
intmain()
for(
int i = k +
1; i <= n; i ++
) cout << ans << endl;
return0;
}
2017校招 數列
題目描述 牛牛的作業薄上有乙個長度為 n 的排列 a,這個排列包含了從1到n的n個數,但是因為一些原因,其中有一些位置 不超過 10 個 看不清了,但是牛牛記得這個數列順序對的數量是 k,順序對是指滿足 i j 且 a i a j 的對數,請幫助牛牛計算出,符合這個要求的合法排列的數目。輸入描述 每...
高職單招數學公式大全,高職單招數學重點公式
高職單招數學公式大全 一 解不等式 1 一元一次不等式 ax b ax b x b a a 0 x0,x1,x2是對應一元二次方程的兩根 判別式 ax bx c 0,解集 當 0時,當 0,當 0,解集為r。判別式 ax bx c 0,解集 當 0時,x x10 1 ax b c ax b c或ax...
網易校招面試
一面 偏向基礎 1 實習經驗。2 網路方面 wait和sleep的區別 sleep指執行緒被呼叫時,佔著cpu不工作,形象地說明為 佔著cpu睡覺 此時,系統的cpu部分資源被占用,其他執行緒無法進入,會增加時間限制。wait指執行緒處於進入等待狀態,形象地說明為 等待使用cpu 此時執行緒不占用任...