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; } } }