int phi(int n) //直接得到
{
int i,rea=n;
for(i=2;i*i<=n;i++)
{
if(n%i==0)
{
rea=rea-rea/i;
while(n%i==0) n/=i;
}
}
if(n>1)
rea=rea-rea/n;
return rea;
}
#include<stdio.h>
bool nop[N];
int phi[N],pri[N],int size;
void getprime()
{
nop[1]=1,phi[1]=0;
for(int i=2;i<N;i++)
{
if(!nop[i])pri[++size]=i,phi[i]=i-1;
for(int j=1;j<=size&&1LL*i*pri[j]<N;j++)
{
nop[i*pri[j]]=1;
if(i%pri[j]==0)
{
phi[i*pri[j]]=phi[i]*pri[j];
break;
}
else phi[i*pri[j]]=phi[i]*(pri[j]-1);
}
}
}
478

被折叠的 条评论
为什么被折叠?



