欧拉筛加一个数组再加点东西。
求出1-n的每一个欧拉函数
const int N=1e5+10;
int prime[N+10],vis[N+10];
int cnt;
int phi[N];
void init(int n)
{
cnt=0;
vis[0]=vis[1]=1;
phi[1]=1;
for(int i=2; i<=n; i++)
{
if(vis[i]==0)
{
prime[cnt++]=i;
phi[i]=i-1;
}
for(int j=0; prime[j]*i<=n; j++)
{
vis[prime[j]*i]=1;
if(i%prime[j]==0)
{
phi[i*prime[j]]=phi[i]*prime[j];
break;
}
phi[i*prime[j]]=phi[i]*(prime[j]-1);
}
}
}