思路
在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; }