欧拉函数|降幂

不羁岁月 提交于 2019-11-28 05:54:00

定义

    对正整数n,欧拉函数是小于或等于n的正整数中与n互质的数的数目。此函数以其首名研究者欧拉命名,它又称为Euler's totient function、φ函数、欧拉商数等。例如φ(8)=4,因为1,3,5,7均和8互质。

内容

   通式:

   其中p1, p2……pn为x的所有质因数,x是不为0的整数。

性质

         ① n的所有质因子之和是φ(n)*n/2。

   ② 若m,n互质,φ(m*n)=φ(m)*φ(n)。(欧拉函数是积性函数)

   ③ 若n为奇数,φ(2n)=φ(n)

   ④ 若n为质数,则φ(n)=n-1

   ⑤ 若n>2,则φ(n)是偶数。

   ⑥ 若p为质数,

           令a为N的质因子,则

    若(N%a==0&&(N/a)%a==0) 则有: φ(N)=φ(N/a)*a

    若(N%a==0&&(N/a)%a!=0) 则有: φ(N)=φ(N/a)*(a-1)

实现

根据公式

int Euler(int n)  {    int res=n;    for(int i=2;i*i<=n;i++)    {      if(n%i==0)        {        res=res/i*(i-1);          while(n%i==0) n/=i;       }    }    if(n>1) res=res/n*(n-1);    return res;  }

 

埃拉托斯特尼筛求欧拉函数

int phi[maxn];  void euler()    {      for(int i=2;i<maxn;i++)    {        if(phi[i]) continue;        for(int j=i;j<maxn;j+=i)      {          if(!phi[j]) phi[j]=j;          phi[j]=phi[j]/i*(i-1);        }      }    }

 

欧拉筛求欧拉函数

int phi[maxn],prime[maxn],top;  bool isprime[maxn];  void euler()    {    phi[1]=1;    memset(isprime,0,sizeof(isprime));    for(int i=2;i<=maxn;i++)    {      if(!isprime[i])      {        prime[top++]=i;        phi[i]=i-1;      }      for(int k=0;k<top&&i*prime[k]<=maxn;k++)      {        isprime[i*prime[k]]=1;        if(i%prime[k]==0)        {          phi[i*prime[k]]=phi[i]*prime[k];          break;        }        else phi[i*prime[k]]=phi[i]*(prime[k]-1);      }    }  }

欧拉降幂

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!