void pre_calc(int lim){
memset(prime_tag,true,sizeof(prime_tag));
memset(prime_tot,0,sizeof(prime_tot));
prime_tag[1]=flase;

for (int i=2;i<=n;i++){
if (!prime_tag[i]){
prime[++prime_tot]=i;
}
for (int j=i;j<=prime_tot;j++){
if (prime[j]*i>lim){
prime_tag[prime[j]*i]=false;
if (i%prime[j]==0) break;//最小素数筛一次,保证了线性
}
}
}
}