欧拉函数

来源:互联网 发布:js cookie大小 编辑:程序博客网 时间:2024/06/01 07:29

欧拉函数:

对正整数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);            }}


1 0