欧拉函数的函数求法及筛法

//函数计算欧拉函数

int ola_phi(int n)

{

    int m = (int)sqrt(n+0.5);

    int ans = n;

    for(int i=2;i<=m;i++)

    {

        if(n%i==0)

        {

            ans = ans/i*(i-1);

            while(n%i==0)

                n/=i;

        }

    }

    if(n > 1)

        ans = ans/n*(n-1);

}



//筛出欧拉函数表

int phi[N];

void phi_table(int n)

{

    for(int i=2;i<=n;i++)

        phi[i] = 0;

    phi[1] = 1;

    for(int i=2;i<=n;i++)

    {

        if(!phi[i])

        {

            for(int j=i;j<=n;j+=i)

            {

                if(!phi[j])

                    phi[j] = j;

                phi[j] = phi[j]/i*(i-1);

            }

        }

    }

}

 

你可能感兴趣的:(函数)