欧拉函数
定义:在数论,对正整数n,欧拉函数是小于或等于n的正整数中与n互质的数的数目(因此φ(1)=1)。此函数以其首名研究者欧拉命名(Euler’s totient function),它又称为Euler’s totient function、φ函数、欧拉商数等。 例如φ(8)=4,因为1,3,5,7均和8互质。欧拉函数是积性函数,当 gcd(a,b)=1时,
通项公式:
为x的质因子。
欧拉函数算法
int oula(int n){ int rea=n; for(int i=2;i*i<=n;i++){ if(n%i==0){ rea=rea - rea/i; while(n%i==0){ n/=i; } } } if(n>1) rea=rea-rea/n; return rea; }
欧拉打表
1.埃氏筛法打表 void getPhi(){ for(int i=1;i<maxn;i++){ p[i]=i; } for(int i=2;i<maxn;i++){ if(p[i]==i){ for(int j=i;j<maxn;j+=i){ p[j]=(p[j]/i)*(i-1); } } } } 2.欧氏筛法打表 void getPhi(){ phi[1]=1; for(int i=2;i<=n;i++){ if(!flag[i]){ prime[++tot]=i; phi[i]=i-1; } for(int j=1;j<=tot;j++){ if(i*prime[j]>n) break; flag[i*prime[j]]=1; if(i%prime[j]==0){ phi[i*prime[j]]=phi[i]*prime[j]; break; } phi[i*prime[j]]=phi[i]*phi[prime[j]]; } } }