问题描述:
整数对(x,y)x,y都不大于n ,且x%y 大于等于 k。问有多少这样的数对。
思考:最简单的来想 当然是双层循环咯,但是当然复杂度太高不行。参照前面一个求余数的问题,我们会想到是否也会有规律。
对k = 0;有n^2个
对k =1;y应该从k+1~n 在x从1~n的过程中余数在从 0~y-1 一直做循环。
例如此时y = 2.那么余数是1010101一直循环,
y = 3. 那么余数120120120 一直循环。
所以找到规律。
代码如下:
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n,k;
cin >> n >> k;
long long res = 0;
if(k == 0)
{
res = n;
res *= res;
cout << res;
return 0;
}
for(int j = k+1;j <= n; ++j)
{
res += n/j * (j-k);
if(n%j >= k)
{
res += n%j - k+1;
}
}
cout << res ;
}