<dl class="lemmaWgt-lemmaTitle lemmaWgt-lemmaTitle-">   <dd class="lemmaWgt-lemmaTitle-title">                            
            
                                 
                           
                           
                           
                 <caption>   0~100欧拉函数表(“x?”代表十位数,“x”代表个位数)   
      </dl>
                        欧拉函数
</dd> </dl>   在   数论,对   正整数n,   欧拉函数是小于n的正整数中与n   互质的数的数目(φ(1)=1)。此函数以其首名研究者欧拉命名(Euler’so totient function),它又称为Euler’s totient function、   φ函数、欧拉   商数等。 例如φ(8)=4,因为1,3,5,7均和8互质。 从欧拉函数引伸出来在环论方面的事实和   拉格朗日定理构成了   欧拉定理的证明。  
   <dl><dt class="basicInfo-item name">   定    义  </dt>   <dd class="basicInfo-item value">    小于n的数中与n   互质的数的数目   </dd>   <dt class="basicInfo-item name">   发现人  </dt>   <dd class="basicInfo-item value">    欧拉(Euler)   </dd>       欧拉函数简介
  通式:      
    
    其中p1, p2……pn为x的所有质因数,x是不为0的整数。 
    φ(1)=1(唯一和1  互质的数(小于等于1)就是1本身)。 
    注意:每种质因数只一个。 比如12=2*2*3那么φ(12)=12*(1-1/2)*(1-1/3)=4 
    若n是质数p的k次幂,      
   ,因为除了p的倍数外,其他数都跟n互质。 
    设n为正整数,以 φ(n)表示不超过n且与n互素的正整数的个数,称为n的欧拉函数值 
    φ:N→N,n→φ(n)称为欧拉函数。 
    欧拉函数是  积性函数——若m,n互质,      
    
    特殊性质:当n为奇数时,      
   , 证明与上述类似。 
    若n为质数则      
    
  欧拉函数证明
编辑  若      
    
    则      
    
    例如      
    
    与欧拉定理、  费马小定理的关系 
    对任何两个互质的正整数a, m(m>=2)有 
    即欧拉定理 
    当m是质数p时,此式则为: 
    即费马小定理。 
  欧拉函数编程实现
编辑  利用欧拉函数和它本身不同质因数的关系,用  筛法计算出某个范围内所有数的欧拉函数值。 
    欧拉函数和它本身不同质因数的关系: 
    欧拉函数ψ(N)=N{∏p|N}(1-1/p)      
    
    亦即:      
    (P是数N的  质因数) 
    如: 
    ψ(10)=10×(1-1/2)×(1-1/5)=4; 
    ψ(30)=30×(1-1/2)×(1-1/3)×(1-1/5)=8; 
    ψ(49)=49×(1-1/7)=      
    =42。 
  欧拉函数C++版
|                 1                       2                       3                       4                       5                       6                       7                       8                       9                       10                       11                       12                       13                       14                       15                       16                       17                       18                       19                       20                       21                       22                       23                       24                       25                       26         |              /*线性筛O(n)时间复杂度内筛出maxn内欧拉函数值*/        int          m[maxn],phi[maxn],p[maxn],pt;         //m[i]是i的最小素因数,p是素数,pt是素数个数        int          make()        {                     phi[1]=1;                     int          N=maxn;                     int          k;                     for         (         int          i=2;i<N;i++)                     {                         if         (!m[i])         //i是素数                             p[pt++]=m[i]=i,phi[i]=i-1;                         for         (         int          j=0;j<pt&&(k=p[j]*i)<N;j++)                         {                             m[k]=p[j];                             if         (m[i]==p[j])         //为了保证以后的数不被再筛,要break                             {                                 phi[k]=phi[i]*p[j];        /*这里的phi[k]与phi[i]后面的∏(p[i]-1)/p[i]都一样(m[i]==p[j])只差一个p[j],就可以保证∏(p[i]-1)/p[i]前面也一样了*/                                 break         ;                                 }                             else                                 phi[k]=phi[i]*(p[j]-1);         //积性函数性质,f(i*k)=f(i)*f(k)                         }                     }        }         |      
欧拉函数pascal版
|                 1                       2                       3                       4                       5                       6                       7                       8                       9                       10                       11                       12                       13                       14                       15                       16                       17                       18                       19                       20                       21                       22                       23                       24                       25                       26                       27                       28                       29                       30                       31                       32                       33                       34                       35                       36                       37                       38                       39                       40                       41                       42                       43                       44                       45                       46                       47                       48                       49         |              const                     maxn         =         10000         ;                     sqrtn         =         trunc(sqrt(maxn));        var                     i,j,n,si:longint;                     fi:array[         1.         .maxn] of longint;                     hash         :array[         1.         .sqrtn] of boolean;                     ssb:array[         1.         .sqrtn] of longint;        procedure yuchuli;        var                     i,j,daili:longint;                     pd:boolean;        begin                     fillchar(         hash         ,sizeof(         hash         ),false);                     i:         =         2         ;                     si:         =         0         ;                     while          i<         =         sqrt(n) do                     begin                         if          not          hash         [i] then                         begin                             for          j:         =         i         +         1          to sqrt(ndivi) do          hash         [i         *         j]:         =         true;                             inc(si);                             ssb[si]:         =         i;                         end;                         inc(i);                     end;                     for          i:         =         1          to maxn do fi[i]:         =         1         ;                     for          i:         =         2          to maxn do                     begin                         daili:         =         i;                         for          j:         =         1          to si do                         begin                             pd:         =         false;                             while          daili mod ssb[j]         =         0          do                             begin                                 daili:         =         daili div ssb[j];                                 if          not          pd then fi[i]:         =         fi[i]         *         (ssb[j]         -         1         )                                 else          fi[i]:         =         fi[i]         *         ssb[j];                                 pd:         =         true;                             end;                         end;                         if          daili<>         1          then fi[i]:         =         fi[i]         *         (daili         -         1         );                     end;        end;        begin                     yuchuli;                     readln(n);                     writeln(fi[n]);        end.         |      
欧拉函数C语言
|                 1                       2                       3                       4                       5                       6                       7                       8                       9                       10                       11                       12                       13                       14                       15                       16                       17                       18                       19                       20                       21                       22                       23                       24         |              #include<stdio.h>        #include<stdlib.h>        int          eular(         int          n)        {                     int          ret=1,i;                     for         (i=2;i*i<=n;i++)                     {                         if         (n%i==0)                         {                             n/=i,ret*=i-1;                             while         (n%i==0) n/=i,ret*=i;                         }                     }                     if         (n>1) ret*=n-1;                     return          ret;        }        int          main ()        {                       int          n,s;                       scanf         (         "%d"         ,&n);                       s=eular(n);                       printf         (         "%d"         ,s);                       return          0;        }         |      
欧拉函数Java语言
|                 1                       2                       3                       4                       5                       6                       7                       8                       9                       10                       11                       12                       13                       14                       15                       16                       17                       18                       19                       20                       21                       22                       23                       24                       25                       26                       27                       28                       29                       30                       31                       32                       33                       34                       35                       36                       37                       38                       39                       40                       41                       42                       43                       44                       45                       46                       47                       48                       49                       50                       51                       52                       53                       54                       55                       56                       57                       58                       59                       60                       61                       62                       63         |              import          java.util.ArrayList;        import          java.util.List;        import          java.util.Scanner;        public          class          Oula {                     public          static          void          main(String[] args){                         Scanner scanner=         new          Scanner(System.in);                         int          num=scanner.nextInt();                         int          a=num;                         double          oulaAnwser=         0         ;                         ArrayList<Integer> oulaList =          new          ArrayList<Integer>();                         if          (isPrime(num)){                             oulaAnwser=num-         1         ;                         }         else         {                             List<Integer> allPrime = getAllPrime(num);                             for         (         int          i : allPrime){                                 int          tem=num;                                 num=repeatdivide(num,i);                                 if          (tem!=num){                                     oulaList.add(i);                                 }                             }                             oulaAnwser=a;                             for          (         int          j :oulaList){                                  oulaAnwser=oulaAnwser*(         1         -(         double         )         1         /j);                             }                         }                         System.out.println(         "欧拉函数的值为"         +Math.round(oulaAnwser));                     }                     public          static          List<Integer> getAllPrime(         int          num){                         ArrayList<Integer> result =          new          ArrayList<Integer>();                         for          (         int          i =         2         ;i<num;i++){                             if          (isPrime(i)) {                                 result.add(i);                             }                         }                         return          result;                     }                     public          static          boolean          isPrime(         int          num){                         if         (num <          2         ) {                             return          false         ;                         }                         for         (         int          i =          2         ; i <= Math.sqrt(num); i++ ) {                             if         (num%i ==          0         ) {                                 return          false         ;                             }                         }                         return          true         ;                     }                     public          static          boolean          canbedivide(         int          num,         int          i ){                         return          num==         1         ?         false         :num%i==         0         ?         true         :         false         ;                     }                     public          static          int          repeatdivide(         int          num,         int          i ){                         int          result=         0         ;                         if          (canbedivide(num,i)){                             result=repeatdivide(num/i,i);                         }         else         {                             return          num;                         }                         return          result;                     }        }         |      
欧拉函数函数表
编辑| φ(n) | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 
| 0? | 0 | 1 | 1 | 2 | 2 | 4 | 2 | 6 | 4 | 6 | 
| 1? | 4 | 10 | 4 | 12 | 6 | 8 | 8 | 16 | 6 | 18 | 
| 2? | 8 | 12 | 10 | 22 | 8 | 20 | 12 | 18 | 12 | 28 | 
| 3? | 8 | 30 | 16 | 20 | 16 | 24 | 12 | 36 | 18 | 24 | 
| 4? | 16 | 40 | 12 | 42 | 20 | 24 | 22 | 46 | 16 | 42 | 
| 5? | 20 | 32 | 24 | 52 | 18 | 40 | 24 | 36 | 28 | 58 | 
| 6? | 16 | 60 | 30 | 36 | 32 | 48 | 20 | 66 | 32 | 44 | 
| 7? | 24 | 70 | 24 | 72 | 36 | 40 | 36 | 60 | 24 | 78 | 
| 8? | 32 | 54 | 40 | 82 | 24 | 64 | 42 | 56 | 40 | 88 | 
| 9? | 24 | 72 | 44 | 60 | 46 | 72 | 32 | 96 | 42 | 60 | 
  φ(100)=40 
     词条标签:  
   <dd id="open-tag-item">     科技术语  ,    科学  ,    数学  ,    学科    </dd>     
京公网安备 11010502036488号