思路
在l和r里面一个一个数肯定会超时的,
可以采用二分先把第一个大于l的平方数找出来,
然后把第一个大于等于r的平方数找出来(等于的情况可以思考一下l==r的情况)
提前打好表然后就能知道中间有多少平方数啦~
代码
#include<bits/stdc++.h>
using namespace std;
int n,l,r,cnt=0,sml_num,big_num;
int fang[150000];
int main(){
fang[0]=0;
for(int i=1;i*i<=1500000000;i++){
fang[i]=i*i;
cnt++;
}
scanf("%d",&n);
while(n--){
scanf("%d%d",&l,&r);
sml_num=lower_bound(fang,fang+cnt,l)-fang;
big_num=upper_bound(fang,fang+cnt,r)-fang;
cout<<big_num-sml_num<<endl;
}
return 0;
} 
京公网安备 11010502036488号