解决思路:分类讨论
当k==0的时候,有n*n对答案
当k!=0的时候,设x%y=z,z>=k.
分类讨论:当x<y
的时候,当x>y
的时候
def simple(n, k):
cnt = 0
for i in range(1, n + 1):
for j in range(1, n + 1):
if i % j >= k:
cnt += 1
return cnt
def better(n, k):
if k == 0:
return n * n
s = 0
for i in range(max(1, k), n + 1):
s += n - i
for i in range(k + 1, n):
group_count = n // i
s += max(0, (group_count - 1)) * (i - k)
s += max(0, n % i - k + 1)
return s
def test():
import random
n = random.randint(3, 100)
k = random.randint(0, n)
return simple(n, k) == better(n, k)
for _ in range(1000):
ans = test()
if not ans:
exit(-1)