欧拉函数是指:对于一个正整数n,小于n且和n互质的正整数(包括1)的个数,记作φ(n) 。
通式:
其中p1, p2……pn为x的所有质因数,x是不为0的整数。
规定:φ(1)=1
注意:每种质因数只有一个。 比如12=2*2*3那么φ(12)=12*(1-1/2)*(1-1/3)=4
特殊性质:
当n为奇数时,
当n为质数时,
欧拉函数是积性函数,当m,n互质时,
若n是质数p的k次幂, ,因为除了p的倍数外,其他数都跟n互质。
欧拉公式的延伸:对于一个数,与其互质的数的总和是euler(n)*n/2
欧拉函数的实现:
int euler(int n)
{
int res=n;
for(int i=2;i*i<=n;i++){//只需遍历到根号n即可
if(n%i==0){
res-=res/i;
while(n%i==0)
n/=i;
}
}
if(n>1)
res-=res/n;
return res;
}
筛选法打欧拉函数表 :
//筛选法打欧拉函数表
#define Max 1000001
int euler[Max];
void maketable()
{
for(int i=1;i<Max;i++)//初始化
euler[i]=i;
for(int i=2;i<Max;i++)
if(euler[i]==i)//如果i是质数
for(int j=i;j<Max;j+=i)
euler[j]-=euler[j]/i;
}