设a,b, x=gcd(a,b);
题目可以转化为: a,b,x^2 组成三角形。
设a<b,
若a为质数,则b一定只能为a^2 , 否则无法构成三角形(证明比较简单略)
若a为合数,则设b= z*y ,令a=(z-1)*y. 则 a,b,y^2 一定可以构成三角形。
所以结论为:
若一个数x是合数,则他不孤独。
若一个数是质数,则如果他的平方也在,则他不孤独,否则孤独。
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
#define re register
#define ls (o<<1)
#define rs (o<<1|1)
//#define m (l+r)/2
#define pb push_back
typedef pair<int,int> pii;
const double PI= acos(-1.0);
const int M = 1e6+7;
/*
int head[M],cnt=1;
void init(int n){cnt=1;for(int i=0;i<=n;i++)head[i]=0;}
struct EDGE{int to,nxt,w;}ee[M*2];
void add(int x,int y,int w){ee[++cnt].nxt=head[x],ee[cnt].w=w,ee[cnt].to=y,head[x]=cnt;}
*/
int prime[M],vs[M];
int sm[M];
int main()
{
int t;
cin>>t;
int sz=0;
for(int i=2;i<=1e6;i++){
if(vs[i])continue;
for(int j=i+i;j<=1e6;j+=i)
vs[j]=1;
prime[++sz]=i;
}
for(int i=2;i<=1e6;i++){
sm[i]=sm[i-1]+(!vs[i]);
}
while(t--){
int n;
scanf("%d",&n);
int tp=sqrt(n);
int ans=sm[n]-sm[tp]+1;
printf("%d\n",ans);
}
return 0;
}