牛牛以前在老师那里得到了一个正整数数对(x, y), 牛牛忘记他们具体是多少了。
但是牛牛记得老师告诉过他x和y均不大于n, 并且x除以y的余数大于等于k。
牛牛希望你能帮他计算一共有多少个可能的数对。
牛牛以前在老师那里得到了一个正整数数对(x, y), 牛牛忘记他们具体是多少了。
牛牛希望你能帮他计算一共有多少个可能的数对。
输入包括两个正整数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,k = map(int,input().split()) i = 1 count = 0 if k == 0: print(n*n) else: while k+i <= n: a = (n//(k+i))*i b = n%(k+i) if b < k: count+=a if b>=k: count+=(a+b-k+1) i+=1 print(count)
余数 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | ... |
1 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | ... |
2 | 0 | 0 | 2 | 2 | 2 | 2 | 2 | 2 | 2 | 2 | 2 | 2 | ... |
3 | 0 | 1 | 0 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | ... |
4 | 0 | 0 | 1 | 0 | 4 | 4 | 4 | 4 | 4 | 4 | 4 | 4 | ... |
5 | 0 | 1 | 2 | 1 | 0 | 5 | 5 | 5 | 5 | 5 | 5 | 5 | ... |
6 | 0 | 0 | 0 | 2 | 1 | 0 | 6 | 6 | 6 | 6 | 6 | 6 | ... |
7 | 0 | 1 | 1 | 3 | 2 | 1 | 0 | 7 | 7 | 7 | 7 | 7 | ... |
8 | 0 | 0 | 2 | 0 | 3 | 2 | 1 | 0 | 8 | 8 | 8 | 8 | ... |
9 | 0 | 1 | 0 | 1 | 4 | 3 | 2 | 1 | 0 | 9 | 9 | 9 | ... |
10 | 0 | 0 | 1 | 2 | 0 | 4 | 3 | 2 | 1 | 0 | 10 | 10 | ... |
11 | 0 | 1 | 2 | 3 | 1 | 5 | 4 | 3 | 2 | 1 | 0 | 11 | ... |
12 | 0 | 0 | 0 | 0 | 2 | 0 | 5 | 4 | 3 | 2 | 1 | 0 | ... |
... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
temp = list(map(int, input().split())) n = temp[0] k = temp[1] if k == 0: ans = n * n # k=0是比较特殊的 else: ans = 0 for y in range(k + 1, n + 1): # 从每一列来看,根据每y个一个循环的规律,快速计算余数矩阵余数值 # cycle = [i for i in range(1, y)] + [0] # 循环部分 satisfy_num = y - k # 一个循环中满足的组合个数 cycle_num = n // y # 完整循环个数 res_num = n % y # 剩余不完整部分循环中的元素个数 ans += satisfy_num * cycle_num + max(res_num - k + 1, 0) # 注意这里最差就是不完整部分满足个数为0,但是不能为负数 print(ans)
#coding:utf-8 import sys line=sys.stdin.readline().split() n=int(line[0]) k=int(line[1]) count=0 if k==0: count=n*n else: for y in range(k+1,n+1): count+=n/y*(y-k)+max(0,n%y-k+1) print count