歐拉函數的使用


一、概念:

  在數論,對正整數n,歐拉函數是小於n的正整數中與n互質的數的數目(φ(1)=1)。

  例如φ(8)=4,因為1,3,5,7均和8互質。

  歐拉函數用希臘字母φ表示,φ(N)表示N的歐拉函數.

  對φ(N)的值,我們可以通俗地理解為小於N且與N互質的數的個數(包含1).

 (初學者一定注意:此處的歐拉函數與圖論中的歐拉回路不同)

二、通式:

   

  其中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) = p^k-p^(k-1) = (p-1)p^(k-1),( 除 p 的倍數外,其他數均為 p 的互質數 )。

       若n = p( p 為質數),則  φ(n) = p-p^(1-1) = p-1。

三、性質:

(1)   p^k型歐拉函數:

若N是質數p(即N=p), φ(n)= φ(p)=p-p^(k-1)=p-1。

若N是質數p的k次冪(即N=p^k),φ(n)=p^k-p^(k-1)=(p-1)p^(k-1)。

(2)mn型歐拉函數

設n為正整數,以φ(n)表示不超過n且與n互素的正整數的個數,稱為n的歐拉函數值。若m,n互質,φ(mn)=(m-1)(n-1)=φ(m)φ(n)。

(3)特殊性質:

若n為奇數時,φ(2n)=φ(n)。

對於任何兩個互質 的正整數a,n(n>2)有:a^φ(n)=1 mod n (恆等於)此公式即 歐拉定理

當n=p 且 a與素數p互質(即:gcd(a,p)=1)則上式有: a^(p-1)=1 mod n (恆等於)此公式即 費馬小定理

三、模板

1.直接求小於或等於n,且與n互質的個數:

int  eular(int n) { int i,ret=n; for(i=2; i<=sqrt(n); i++) { if(n%i==0) { ret=ret/i*(i-1); while(n%i==0) n/=i; } } if(n>1) ret=ret/n*(n-1); return ret; }

2.篩選模板:求[1,n]之間每個數的質因數的個數

#define size 1000001
int euler[size]; void Init() { euler[1]=1; for(int i=2; i<size; i++) if(!euler[i]) for(int j=i; j<size; j+=i) { if(!euler[j]) euler[j]=j; euler[j]=euler[j]/i*(i-1);//先進行除法是為了防止中間數據的溢出
 } }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM