歐拉函數與歐拉定理

轉載請說明出處:http://blog.csdn.net/leader_one/article/details/77619762

說在前面

按照慣例,出於尊重,還是簡單介紹一下這位多產的學術偉人
萊昂哈德·歐拉(Leonhard Euler ,1707年4月15日~1783年9月18日),瑞士數學家、自然科學家。1707年4月15日出生於瑞士的巴塞爾,1783年9月18日於俄國聖彼得堡去世。歐拉出生於牧師家庭,自幼受父親的影響。13歲時入讀巴塞爾大學,15歲大學畢業,16歲獲得碩士學位。歐拉是18世紀數學界最傑出的人物之一,他不但爲數學界作出貢獻,更把整個數學推至物理的領域。他是數學史上最多產的數學家,平均每年寫出八百多頁的論文,還寫了大量的力學、分析學、幾何學、變分法等的課本,《無窮小分析引論》、《微分學原理》、《積分學原理》等都成爲數學界中的經典著作。歐拉對數學的研究如此之廣泛,因此在許多數學的分支中也可經常見到以他的名字命名的重要常數、公式和定理。
這篇文章要講的就是歐拉函數及歐拉定理。


歐拉函數

簡介歐拉函數
首先,沒有歐拉函數是沒有歐拉定理滴。
在數論,對正整數n,歐拉函數是小於n的正整數中與n互質的數的數目(φ(1)=1)。此函數以其首名研究者歐拉命名(Euler’so totient function),它又稱爲Euler’s totient function、φ函數、歐拉商數等。 例如φ(8)=4,因爲1,3,5,7均和8互質。


如何求歐拉函數
這裏有個通式
通式
(φ這個符號好難打。。就直接掛圖了)
其中每個p是x互不相同的質因數,x爲正整數,φ(1)=1,同時顯然的任意一個質數的φ就是它自己減一。
通式的實質是將與x有大於1的公約數的數全部篩掉了。
這樣求單個φ可以,但求一大串效率是不是太低了?


利用歐拉函數的特殊性質求φ
首先,p爲質數
若i mod p = 0,則φ(i * p) = φ(i) * p;
若i mod p > 0,則φ(i * p) = φ(i) * (p-1);
證明自己看看同時就懂了。
這樣我們O(n)的求出1~n的φ,如同用歐拉篩法求質數一樣,φ也可以用篩法求質數的同時求。
直接掛代碼吧:

for(i=1;i<=n;i++)
{
    if(prime[i]) //判斷是否質數
    {
        phi[i] = i-1;
        num++;
        zs[num] = i;
    }
    //篩質數順便求解
    for(j=1;i*zs[j]<=n && j<=num;j++)
    {
        prime[i*zs[j]] = false;
        if(i%zs[j]!=0) phi[i*zs[j]] = phi[i]*phi[zs[j]];
            else phi[i*zs[j]] = phi[i]*zs[j];
    }
}

與歐拉篩法求質數的方式如出一轍。


歐拉函數的一些應用

  1. 求1~n內與n互質的數的個數,直接就是φ。
  2. 求1~n內與n互質的數的總和,就是n * φ(n)/2;(1~n內與n互質的數具有對稱性,即gcd(x,n)=1,則gcd(n-x,n)=1)
  3. 接下來要講的歐拉定理
  4. ……

歐拉定理

簡介歐拉定理
若gcd(a,p)=1,則a^φ(p) ≡ 1 (mod p) 這個定理可以求乘法逆元(乘法逆元講解)。
而且包含了費馬小定理(a ^ (p-1) ≡ 1 (mod p)要求p爲質數),因爲當p爲質數時φ(p) = p-1。


證明
將1~n中與n互質的數按順序排布:x1,x2……xφ(n) (顯然,共有φ(n)個數)
我們考慮這麼一些數:
m1=a * x1;m2=a * x2;m3=a * x3 …… mφ(n) = a * xφ(n);
一、這些數中的任意兩個都不模n同餘
因爲如果有mS≡mR (mod n) (這裏假定mS更大一些),就有:
mS-mR=a(xS-xR)=qn,即n能整除a(xS-xR);
但是a與n互質,而且xS-xR < n,因而左式不可能被n整除;
也就是說這些數中的任意兩個都不模n同餘,φ(n)個數有φ(n)種餘數。

二、這些數除n的餘數都與n互質
設r = a * xi mod n,則a * xi = qn+r;
設d = gcd(qn+r,n),因爲a與n互質,xi與n互質,所以qn+r與n互質,所以d = 1;
由歐幾里得定理(歐幾里得講解)得,gcd(r,n) = gcd(qn+r,n);
所以gcd(r,n) = 1,即餘數與n互質。

由上可知,數m1,m2,m3……mφ(n)(如果將其次序重新排列)mod n必須相應地同餘於x1,x2,x3……xφ(n)。
故得出:m1 * m2 * m3……mφ(n) ≡ x1 * x2 * x3……xφ(n) (mod n)
或者說a^φ(n) * (x1 * x2 * x3……xφ(n)) ≡ x1 * x2 * x3……xφ(n) (mod n)
兩邊同時消去x1 * x2 * x3……xφ(n),得 a^φ(n) ≡ 1 (mod n),得證。


歐拉定理的應用及推廣

求解乘法逆元;
取模時降冪 若a,n互質 a^k ≡ a^(k mod φ(n)) (mod n) 顯然的;
擴展歐拉定理:
這裏寫圖片描述
有沒有覺得和上一個應用有點像?好像沒什麼用?
實際上功能強大,可以在 a和m不互質的時候使用,非常強的一種降冪方式,具體證明這裏不在贅述,有鏈接(點這裏)。

在處理許多關於模的問題時,尤其是OI類賽事,歐拉函數及定理是不可或缺的利器!


按照慣例再說兩句

本人蒟蒻一枚,博客難免有誤,發現錯誤的大牛牪犇可以發私信聯繫本人指正錯誤。另外本博客可能會更新,可以考慮收藏一下。
好了,暫時就講這麼多了,如果絕對這裏講解得不夠詳細,也可以私信聯繫本人交流一下。
歡迎轉載,轉載請說明出處,謝謝。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章