题意:
给出了称之为“真实数字”的定义,询问要求的数字个数。
思路:
打表找规律。 sqrt有精度问题
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll l, r, ans, kf;
ll Sqrt(ll l,ll r,ll a) {
ll mid=(l+r)/2;
if(l>r)
return r;
if(a/mid>mid)
return Sqrt(mid+1,r,a);
else if(a/mid<mid)
return Sqrt(l,mid-1,a);
else
return mid;
}
ll get(ll k){
if(k < 6) return 0;
kf = Sqrt(1, k, k);
if(kf % 2) return k / 2 - 1;
else return k / 2 - 2;
}
int main(){
int T, tot = 0;
/*for(int i = 1; i <= 10000; i++){
int cnt = 0;
for(int j = 1; j <= i; j++) if(i % j && __gcd(i, j) != 1) cnt++;
a[i] = tot += cnt % 2;
}*/
scanf("%d", &T);
while(T--){
scanf("%lld%lld", &l, &r);
ll ansl = get(l - 1);
ll ansr = get(r);
printf("%lld\n", ansr - ansl);
}
return 0;
}