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

//函数计算欧拉函数
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);
            }
        }
    }
}
原文地址:https://www.cnblogs.com/whatbeg/p/3813836.html