#include <iostream>
using namespace std;
typedef long long LL;
int main()
{
LL n, k;
cin >> n >> k;
LL count = 0;
if (k == 0)
count = n*n;
else {
//注意到当除数是y时,当x=1~n时,余数是1,2,3,...,y-1,0循环出现,循环节长度显然是y
//枚举y=k+1~n,y从k+1开始(如果y=k,那么取余最大才是k-1)
//然后对于x=1~n,总共出现了[n/y]个循环节,然后数出每个循环节里面不小于k的余数(y-k个)。最后再数出不满一个循环节的不小于k的余数,就是答案了。
for (LL y = k + 1; y <= n; y++)
{
LL temp = 0;
temp = (n / y)*(y - k);
if (n%y >= k)//最后一节是不满一个循环的节,而且最后一节里数的个数>=k
{
temp += n%y - k + 1;
}
count += temp;
}
}
cout << count << endl;
system("pause");
return 0;
}
数对(网易)
最新推荐文章于 2020-07-28 09:20:29 发布