一:题目
二:思路分析
1.首先,很容易想到的就是两个循环遍历,但是提交时第一个数据就是十分大,时间不允许
int main()
{
int n = 0,k = 0;
scanf("%d %d",&n,&k);
int cont = 0;
for(int x = 1;x <= n; x++)
{
for(int y = 1; y<=n; y++)
{
if(x %y >=k)
cont++;
}
}
printf("%d",cont);
}
2.这时,我们就不得不换一种思路,题目中有一个标签:基础数学,也就是这个题可以找数学规律
三:代码
int main()
{
long n,k = 0;
long count =0;
while(~scanf("%ld %ld",&n,&k))
{
if(k==0)
{
printf("%ld\n",n*n);
continue;
}
for(long j = k+1;j<=n;j++)
{
long help = n%j<k?0:(n%j)-k+1;
count+=(j-k)*(n/j)+help;
}
printf("%ld\n",count);
}
return 0;
}