题解:
这个题目其实还有另外一种解法,也是参考了网上的想法,感觉这种方法非常神奇。
就是说这个其实只第一个和最后一个都进行开平方再向下取整,假设f(x)=x²(x>0),这个函数在x大于0的时候满足单调递增,所以说开根以后完全平方数是一一对应的,假设a=2,b=9,这里面的完全平方数是4,9,开根以后相减答案是2。
但是这里需要特殊考虑另外一个问题,也就是当a是完全平方数的时候,这个时候我们就需要sqrt(b)-sqrt(a)+1了
假设a=1,b=4,完全平方数是2个,sqrt(4)-sqrt(1)+1=2
#pragma GCC optimize(3,"Ofast","inline") #include <iostream> #include <cstdio> #include <cstring> #include <cmath> #include <math.h> #include <string> #include <list> #include <set> #include <map> #include <queue> #include <stack> #include <algorithm> #include <stdlib.h> #include <vector> #define maxn 1000000 const int MaxN = 0x3f3f3f3f; const int MinN = 0xc0c0c00c; typedef long long ll; const int mod = 1e9 + 7; using namespace std; bool judge(int x){ if((int)sqrt(x)*(int)sqrt(x)==x) return true; return false; } int main() { int n; cin>>n; while(n--){ int x,y; scanf("%d%d",&x,&y); if(judge(x)){ cout<<(int)sqrt(y)-(int)sqrt(x)+1<<endl; continue; } cout<<(int)sqrt(y)-(int)sqrt(x)<<endl; } return 0; }