欧拉函数线性筛

版权声明:本文为博主原创文章,未经博主允许不得转载。 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);
        }
    }
}

猜你喜欢

转载自blog.csdn.net/Game_Acm/article/details/82013941