#include<stdio.h>
#include<math.h>
int main() {
long long int l, r;
int n;
int cnt = 0;
scanf("%d", &n);
for (int i = 1; i <= n; i++) {
scanf("%lld%lld", &l, &r);
cnt =(int) sqrt(r) - (int) sqrt(l);
if(((int) sqrt(l))* ((int)sqrt(l))==l){
cnt++;
}
printf("%d\n", cnt);
cnt = 0;
}
return 0;
}
开始做这题·感觉有点坑,0这个数没考虑到,感觉好蠢,这题其实可以运用前缀和思想来写,可以先找到r以前的所有平方数,再找出l前所有的平方数,(这个用相减法时,如果l本身是一个平方数则加上这个平方数),
在判断这个数是否是平方数是可以用平方根来搞搞,被忘了加个int强制转换。
京公网安备 11010502036488号