• 欧拉函数


    欧拉函数详解

    对一个正整数N,欧拉函数是小于N且与N互质的数的个数.。

    例如φ(24)=8,因为1, 5, 7, 11, 13, 17, 19, 23均和 24 互质。

    φ(n) = n*(1-1/p1)*(1-1/p2)*......(1-1/pn)   其中(p1.....pn)为N的素因子

     

    欧拉函数的基本性质:

     

    ① N是不为0的整数。φ(1)=1(唯一和1互质的数就是1本身)

    ② 除了N=2,φ(N)都是偶数.

    ③ 小于N且与N互质的所有数的和是φ(n)*n/2

    ④ 欧拉函数是积性函数——若m,n互质,φ(m*n)=φ(m)*φ(n)。

    ⑤ 当N为奇数时,φ(2*N)=φ(N)

    ⑥ 若N是质数p的k次幂,φ(N)=p^k-p^(k-1)=(p-1)p^(k-1),因为除了p的倍数外,其他数都跟N互质

    ⑦ 当N是质数时,φ(N) = N-1

    8当b是质数,a%b==0,phi(a*b)=phi(a)*b

    算法实现:

    1.直接实现

     1 int phi(int n)
     2 {
     3     int rea=n;
     4     for(int i=2;i<=n;i++)
     5     {
     6         if(n%i==0)//第一次找到的必为素因子
     7         {
     8             rea=rea-rea/i;
     9             do{
    10                 n/=i;//把素因子全部排除掉
    11             }while(n%i==0);
    12         }
    13     }
    14     return rea;
    15 }

    参照公式

    2.素数表实现

    bool b[50000];
    int p[50000];
    void prime()
    {
        memset(b,0,sizeof(b));
        b[0]=b[1]=1;
        int k=0;
        for(int i=2;i<=50000;i++)
        {
            if(b[i]==0)
            {
                p[k]=i;
                k++;
                for(int j=i+i;j<=50000;j+=i)
                {
                    b[j]=1;
                }
            }
        }
    }
    
    int phi(int n)
    {
        int rea=n;
        for(int i=0;p[i]*p[i]<=n;i++)
        {
            if(n%p[i]==0)
            {
                rea=rea-rea/i;
                do{
                    n/=p[i];
                }while(n%p[i]==0);
            }
            if(n>1) rea=rea-rea/n;//减去自身的
    
        }return rea;
    }

     3.递推实现

    void phi()
    {
        for(int i=1;i<=50000;i++) p[i]=i;
        for(int i=2;i<=50000;i+=2) p[i]/=2;//根据定理φ(2*N)=φ(N)
        for(int i=3;i<=50000;i+=2)
        {
            if(p[i]==i)
            {
                for(int j=i;j<=50000;j+=i)
                {
                    p[j]=p[j]/i*(i-1);
                }
            }
        }
    }
  • 相关阅读:
    org.tinygroup.ehcache-EhCache缓存解决方案
    org.tinygroup.validate-验证框架
    org.tinygroup.context-上下文环境
    org.tinygroup.commons-常用工具类
    org.tinygroup.context2object-参数对象构建
    org.tinygroup.config-统一应用配置
    org.tinygroup.binarytree-二叉树
    org.tinygroup.service-服务
    flask之wtform与flask-session组件
    Flask信号源码流程
  • 原文地址:https://www.cnblogs.com/Fy1999/p/8719329.html
Copyright © 2020-2023  润新知