算法模板-欧拉函数

欧拉函数:给定一个正整数n,在小于等于n的数中,与n互质的数的个数。

关于欧拉函数,有以下几个规律:

  1.当n为质数时,euler(n)=n-1.

  2.当p与q互质时,euler(p*q)=euler(p)*euler(q).

  3.当n等于p^k时,p为质数,euler(n)=p^k-p^(k-1).

对于任意的n,有n=p1^m1*p2^m2*p3^m3……*pk^mk; p1……pk为质数,所以p1^m1……pk^mk都互质

所以euler(n)=euler(p1^m1)*euler(p2^m2)……*euler(pk^mk)

由于规律3,euler(p^k)=(p-1)*p^(k-1)

推理可得:euler(n)=n*(1-1/p1)*(1-1/p2)……*(1-1/pk)

算法实现:利用质因数分解,分解出质因数组合,套用公式即可。

扫描二维码关注公众号,回复: 10909665 查看本文章
int euler(int n){
    int res=n;
    for(int i=2;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;
} 

猜你喜欢

转载自www.cnblogs.com/xinwang-coding/p/12724309.html
今日推荐