用最小的素因子篩掉每個數
int prime[N],phi[N],cnt;// prime:記錄質數,phi記錄歐拉函數
int Min_factor[N];// i的最小素因子
bool vis[N];
void Init()
{
cnt=0;
phi[1]=1;
int x;
for(int i=2;i<N;i++)
{
if(!vis[i])
{
prime[++cnt]=i;
phi[i]=i-1;
Min_factor[i]=i;
}
for(int k=1;k<=cnt&&prime[k]*i<N;k++)
{
x=prime[k]*i;
vis[x]=true;
Min_factor[x]=prime[k];
if(i%prime[k]==0)
{
phi[x]=phi[i]*prime[k];
break;
}
else phi[x]=phi[i]*(prime[k]-1);
}
}
}