思路
首先打表,将[1,1000000000]中31622个完全平方数打表
找到起始位置和结束位置,然后同0比大小,输出大的
代码
#include<bits/stdc++.h>
using namespace std;
const int MAXN = 3e5+2000;
#define ll long long
int a[MAXN];
int main(void)
{
int n;
cin>>n;
for(int i=0;i<MAXN;++i)
{
a[i] = i*i;
}
int l,r;
while(n--){
cin>>l>>r;
l = lower_bound(a,a+MAXN,l)-a;//lower_bound(起始地址,结束地址,要查找的数值) 返回的是数值 第一个 出现的位置。
r = upper_bound(a,a+MAXN,r)-a;//upper_bound(起始地址,结束地址,要查找的数值) 返回的是 第一个大于待查找数值 出现的位置。
//binary_search(起始地址,结束地址,要查找的数值) 返回的是是否存在这么一个数,是一个bool值。
cout<<max(r-l,0)<<endl;
}
return 0;
}