题解 UVA11461 【Square Numbers】

实际发表时间:2020-04-24
https://www.luogu.com.cn/problem/UVA11461

思路:前缀和

不难发现,\(1\)~\(n\)中的完全平方数有\(\left\lfloor\sqrt{n}\right\rfloor\)个,因为它们分别是\(1^2,2^2,\cdots,\left\lfloor\sqrt{n}\right\rfloor^2\).
那么,我们可以预处理\(1\)~\(10^5\)中完全平方数,这就是前缀和\(s\)数组。
而求\(\left[l,r\right]\)完全平方数的个数,就是\(s_r-s_{l-1}\),做减法即可

极简代码:

#include<bits/stdc++.h>
#define rint register int//register优化
using namespace std;

const int N=1e5+5;
int s[N],a,b;

int main()
{
	for(rint i=1;i<=100000;i++)s[i]=sqrt(i);//计算1~10⁵前缀和
	while(~scanf("%d%d",&a,&b)&&a&&b)printf("%d\n",s[b]-s[a-1]);//每次读入和输出
	return 0;
}
posted @ 2020-08-29 10:42  ADay526  阅读(117)  评论(0)    收藏  举报