质数,$\varphi$和$\mu$线性筛
typedef long long ll; bool check[N]; int mu[N],pri[N],tot; ll phi[N]; void init(int lim){ check[1]=1,phi[1]=0;mu[1]=1; for(int i=2;i<=lim;i++){ if(!check[i]){ pri[++tot]=i;phi[i]=i-1;mu[i]=-1; } for(int j=1;j<=tot&&i*pri[j]<=lim;j++){ check[i*pri[j]]=1; if(i%pri[j]==0){ phi[i*pri[j]]=phi[i]*pri[j]; mu[i*pri[j]]=0; break; } else{ phi[i*pri[j]]=phi[i]*(pri[j]-1); mu[i*pri[j]]=-mu[i]; } } } }