越到后面,互质出现的频率越小,所以phi[1000003]=1000000即n未1000000时也只需要1000003,所以ll也不用
#include<bits/stdc++.h>
#define inf 0x3f3f3f3f
typedef long long ll;
using namespace std;
const int maxn=1e6+7;
int p[maxn],phi[maxn];
void f(){
int cnt=0;
memset(phi,0,sizeof(phi));
phi[1]=1;
for(int i=2;i<maxn-1;i++){
//vis可舍去,直接phi初始化为0,若phi仍为0,说明还未访问
if(!phi[i]) {
p[++cnt]=i;
phi[i]=i-1;
}
for(int j=1;j<=cnt&&i*p[j]<maxn-1;j++){
if(i%p[j]==0){
phi[i*p[j]]=phi[i]*p[j];
break;
}
phi[i*p[j]]=phi[i]*(p[j]-1);
}
}
}
int main(){
int t,n;
int ans;
scanf("%d",&t);
f();
while(t--){
scanf("%d",&n);
ans=n;
//直接遍历也就O(n)时间,可忽略。不用专门搞个数组inv记录,也不用搞个结构体sort二分
while(phi[ans]<n) ans++;
printf("%d\n",ans);
}
return 0;
}