時間限制:1秒 空間限制:32768k
牛牛以前在老師那裡得到了乙個正整數數對(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)
首先想到的肯定是列舉法,但對於n < =100000來說,肯定會超過時間的限制考慮條件x除以y的餘數大於等於k
,所以除數y∈[
k+1,
n]
y\in[k+1,n]
y∈[k+1
,n]假設x是[0,n]
之間的任意值,那麼在這段區間至少可以分成n/y
個完整的,長度為y的區間:x = [1……y-2,y-1,y] [y+1,……,2y-1,2y]……[……]…… [……,n]
,在每個區間上,除以y的餘數分別是1,2,······,y-1,0
,滿足x除以y的餘數大於等於k
的有y-k
個;對於最後一段,長度可能不夠y,計算該區間上滿足條件的個數為:n%y-k+1
由於x除以y的餘數大於等於k
,所以y=3,4,5
y=3
,x被分為[1,2,3] [4,5]
5%3 =1個完整區間 每個區間內有y-k=3-2=1個滿足條件,對於最後一段區間長度不夠y=3,用n%y-k+1=5%3-2+1=1
個滿足條件;
同理y=4 有n%y*(y-k)+n%y-k+1=5%4*(4-2)+5%4-2+1=2
個滿足條件;
y=5 ,沒有不完整段,所以有n%y*(y-k)=5%5*(5-2)=3
個滿足條件;
綜上:共有7個滿足條件;
if __name__ ==
"__main__"
: n,k =
map(
int,
input()
.split())
count =
0if k ==0:
# k = 0是一種特殊情況
count = n * n
else
:for i in
range
(k+1
,n+1):
count +=
(n // i)
*(i - k)
+max(0
,(n % i)
- k +1)
#此處需注意 如果用以下**代替會出現錯誤情況,如k = 4, n = 5時,5 % 4 - 4 + 1 = -4 ,此時最後一段滿足的個數為0,而不會是複數
# for i in range(k+1,n+1):
#count += (n // i) *(i - k)
# if n % i != 0:
# count = count + (n % i) - k + 1
print
(count)
網易2019實習生招聘程式設計題集合
為了找到自己滿意的工作,牛牛收集了每種工作的難度和報酬。牛牛選工作的標準是在難度不超過自身能力值的情況下,牛牛選擇報酬最高的工作。在牛牛選定了自己的工作後,牛牛的小夥伴們來找牛牛幫忙選工作,牛牛依然使用自己的標準來幫助小夥伴們。牛牛的小夥伴太多了,於是他只好把這個任務交給了你。小q得到乙個神奇的數列...
網易2019實習生招聘程式設計題 牛牛找工作
為了找到自己滿意的工作,牛牛收集了每種工作的難度和報酬。牛牛選工作的標準是在難度不超過自身能力值的情況下,牛牛選擇報酬最高的工作。在牛牛選定了自己的工作後,牛牛的小夥伴們來找牛牛幫忙選工作,牛牛依然使用自己的標準來幫助小夥伴們。牛牛的小夥伴太多了,於是他只好把這個任務交給了你。輸入描述 每個輸入包含...
網易2019實習生招聘程式設計題(牛牛的鬧鐘)
題目 牛牛總是睡過頭,所以他定了很多鬧鐘,只有在鬧鐘響的時候他才會醒過來並且決定起不起床。從他起床算起他需要x分鐘到達教室,上課時間為當天的a時b分,請問他最晚可以什麼時間起床 輸入描述 每個輸入包含乙個測試用例。每個測試用例的第一行包含乙個正整數,表示鬧鐘的數量n n 100 接下來的n行每行包含...