直接求解代码如下:
public static int eular(int n){
int ret=1,i;
for(i=2;i*i<=n;i++){
if(n%i==0){
n/=i;
ret*=i-1;
while(n%i==0){
n/=i;
ret*=i;
}
}
}
if(n>1)ret*=n-1;
return ret;
}
打表代码如下static int maxn=1000007;
static int p[]=new int[maxn];
public static void phi()
{
p[1]=1;
for(int i=2;i<maxn;i++)
{
if(p[i]==0)
for(int j=i;j<=maxn;j+=i)
{
if(p[j]==-0)p[j]=j;
p[j]=p[j]/i*(i-1);
}
}
}: