const int maxn = 111111;
int m[maxn],phi[maxn],p[maxn],pt;//m[i]是i的最小素因数,p是素数,pt是素数个数
int make()
{
phi[1] = 1;
int N = maxn;
int k;
phi[1] = 1;
for(int i = 2; i < N; i ++)
{
if(!m[i])//i是素数
p[pt++]=m[i]=i,phi[i]=i-1;
for(int j=0; j < pt&& (k = p[j] * i) < N; j ++)
{
m[k] = p[j];
if(m[i] == p[j])//为了保证以后的数不被再筛,要break
{
phi[k] = phi[i]*p[j];
/*这里的phi[k]与phi[i]后面的∏(p[i]-1)/p[i]都一样(m[i]==p[j])只差一个p[j],就可以保证∏(p[i]-1)/p[i]前面也一样了*/
break;
}
else
{
phi[k] = phi[i] * (p[j] - 1);//积性函数性质,f(i*k)=f(i)*f(k)
}
}
}
}