欧拉函数

欧拉函数:

对正整数n,欧拉函数是小于n的数中与n互质的数的数目。

φ(x)=x(1-1/p1)(1-1/p2)(1-1/p3)(1-1/p4)..(1-1/pn),其中p1, p2……pnx的所有质因数

 

10=2*5,30=2*3*5,49=72.

φ(10)=10*(1-1/2)*(1-1/5)=4

φ(30)=30*(1-1/2)*(1-1/3)*(1-1/5)=8

φ(49)=49*(1-1/7)=42



定理:

1.n是质数pk次幂,φ(n) = pk-p(k-1) =(p-1)p(k-1),因为除了p的倍数外,其他数都跟n互质。

2.n为素数,φ(n)  = n - 1

3.n为奇数时,φ(2n)=φ(n)

4.欧拉函数是积性函数——若m,n互质,φ(mn)=φ(m)φ(n)

5.欧拉定理:若n,a为正整数,且n,a互质,则:a^φ(n)%n=1,φ(n) = n-1


int eular(int n)//计算φ(n) 
{
    int m=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=n/i;
        }
    if(n>1)
        ans=ans/n*(n-1);
return ans;
}

用筛选法求欧拉函数数组:

int eular[1000005];
void eular_table(int n)
{
    memset(eular,0,sizeof(eular));
    eular[1]=1;
    for(int i=2;i<=n;i++)
        if(!eular[i])
            for(int j=i;j<=n;j+=i)
            {
                if(!eular[j])
                    eular[j]=j;
                eular[j]=eular[j]/i*(i-1);
            }
}


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