欧拉函数 一直含糊不清 写一写记录下。
欧拉函数 用来求n以内与n互质的数的个数,公式 Euler(n)= n(1 - 1/p1)(1 - 1/p2)…… 其中 (p1,p2…… 是n的质因子(质因子,是质数而且是n的因子))。
代码实现
1.直接法
int Euler(int x)
{
int res=x,a=x;
for(int i=2;i*i<=a;i++){
if(a%i == 0){
res=res/i*(i-1);//求出n的 第一个质因子之后代入公式 ,此为化简后。
while(a%i == 0) a=a/i;
}
}
if(a>1) res=res/a*(a-1);
return res;
}
2.打表法
typedef Maxn 100005//或者其他数字
//......
int p[Maxn];
for(int i=1;i<=Maxn;i++)
p[i]=i;
for(int i=2;i<=Maxn;i+=2)
p[i]=p[i]/2;
for(int i=3;i<=Maxn;i+=2){
if(p[i] == i){
for(int j=i;j<=Maxn;j+=i)
p[j]=p[j]/i*(i-1);
}
}