版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Game_Acm/article/details/82013941
bool isprime[maxm];
int primes[maxn],phi[maxm],len;
void Get_phi()
{
len = 0;
phi[1] = 1;
memset ( isprime , true , sizeof(isprime) );
isprime[0] = false;
isprime[1] = false;
for ( int i=2 ; i<maxm ; i++ )
{
if ( isprime[i] )
{
primes[len++] = i;
phi[i] = i-1;
}
for ( int j=0 ; j<len ; j++ )
{
if ( i*primes[j]>=maxm ) break;
isprime[i*primes[j]] = false;
if ( i%primes[j]==0 )
{
phi[i*primes[j]] = phi[i]*primes[j];
break;
}
else
phi[i*primes[j]] = phi[i]*(primes[j]-1);
}
}
}