题解 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;
}

浙公网安备 33010602011771号