int b[N+2], pm[N+2],tot=0;
void init(){
b[1]=1;
for(int i=2;i<=N;i++){
if(b[i]) continue;
pm[++tot]= i;
for(int j=2;j*i<=N;j++) b[j*i]=1;
}
}
const int M=1e8;
int mn[M],fac[M],tot,n;
void init(int top){
memset(mn,0,sizeof mn); tot=0;
int i,j;
for(i=2;i<=top;i++){
if(mn[i]==0) mn[i]=i,fac[++tot]=i;
for(j=1;j<=tot&&i*fac[j]<=top;j++){
if(mn[i]<fac[j]) break;
mn[i*fac[j]]=fac[j];
}
}
}
const int M=1e8;
int b[M],c[M],tot,n;
void init(int top){
memset(b,1,sizeof b); b[1]=0;
int i,j;
for(i=2;i<=top;i++){
if(b[i]) c[++tot]=i;
for(j=1;j<=tot&&i*c[j]<=top;j++){
b[i*c[j]]=0;
if(i%c[j]==0) break;
}
}
}