欧拉函数
简介
在数论,对正整数n,欧拉函数是小于n的数中与n互质的数的数目。此函数以其首名研究者欧拉命名(Ruler’so totient function),它又称为Euler’s totient function、φ函数、欧拉商数等。 例如φ(8)=4,因为1,3,5,7均和8互质。 从欧拉函数引伸出来在环论方面的事实和拉格朗日定理构成了欧拉定理的证明。
性质
若n是质数p的k次幂
(因为除了p的倍数外,其他数都跟n互质)
若n为质数则
这些定理是筛法求欧拉函数的基础
算法写法
直接求解
int euler(int n){ //返回euler(n)
int res=n,a=n;
for(int i=2;i*i<=a;i++){
if(a%i==0){
res=res/i*(i-1);//先进行除法是为了防止中间数据的溢出
while(a%i==0)
a/=i;
}
}
if(a>1) res=res/a*(a-1);
return res;
}
筛法
long long a[1000020];
memset(a,0,sizeof(a));
a[1]=1;
for(int i=2; i<1000020; i++)
if(!a[i])
for(int j=i; j<1000020; j+=i) {
if(!a[j])
a[j]=j;
a[j]=a[j]/i*(i-1);
}