小白演算法學習 尤拉函式

2021-08-16 01:33:10 字數 1318 閱讀 6414

請思考以下問題:

任意給定正整數n,請問在小於等於n的正整數之中,有多少個與n構成互質關係?(比如,在1到8之中,有多少個數與8構成互質關係?)

計算這個值的方法就叫做尤拉函式,以φ(n)表示。在1到8之中,與8形成互質關係的是1、3、5、7,所以 φ(n) = 4。

φ(n) 的計算方法並不複雜,但是為了得到最後那個公式,需要一步步討論。

第一種情況

如果n=1,則 φ(1) = 1 。因為1與任何數(包括自身)都構成互質關係。

第二種情況

如果n是質數,則 φ(n)=n-1 。因為質數與小於它的每乙個數,都構成互質關係。比如5與1、2、3、4都構成互質關係。

第三種情況

如果n是質數的某乙個次方,即 n = p^k (p為質數,k為大於等於1的整數),則

比如 φ(8) = φ(2^3) =2^3 - 2^2 = 8 -4 = 4。

這是因為只有當乙個數不包含質數p,才可能與n互質。而包含質數p的數一共有p^(k-1)個,即1×p、2×p、3×p、...、p^(k-1)×p,把它們去除,剩下的就是與n互質的數。

上面的式子還可以寫成下面的形式:

可以看出,上面的第二種情況是 k=1 時的特例。

第四種情況

如果n可以分解成兩個互質的整數之積,

n = p1 × p2

φ(n) = φ(p1p2) = φ(p1)φ(p2)

即積的尤拉函式等於各個因子的尤拉函式之積。比如,φ(56)=φ(8×7)=φ(8)×φ(7)=4×6=24。

這一條的證明要用到"中國剩餘定理",這裡就不展開了,只簡單說一下思路:如果a與p1互質(a第五種情況

因為任意乙個大於1的正整數,都可以寫成一系列質數的積。

根據第4條的結論,得到

再根據第3條的結論,得到

也就等於

這就是尤拉函式的通用計算公式。比如,1323的尤拉函式,計算過程如下:

演算法函式 演算法學習筆記 18 尤拉函式

數論中的尤拉函式 對於尤拉函式,主要有如下性質 我們來證明第乙個性質 在不大於 不與之互質的只有 至於第二個性質,設那 第三個性質的證明需要用到複雜一些的數論知識,這裡不證了,可參見這篇部落格。符合這種性質的數論函式稱為積性函式。我們把正整數質因數分解 所有 兩兩互質,由尤拉函式的性質有 即 用這個...

尤拉函式演算法

尤拉函式 1 2 尤拉函式 3小於或等於n的正整數中,與n互質的數的數目4 5 include6 define n 3000005 7 int64 ans n 8void init 打表法 916 17int euler int n 直接求法 1826 27 28if n 1 ret n 1 29 ...

演算法提高 尤拉函式

說明 2016.4.5 已更新試題,請重新提交自己的程式。問題描述 給定乙個大於1,不超過2000000的正整數n,輸出尤拉函式,phi n 的值。如果你並不了解尤拉函式,那麼請參閱提示。輸入格式 在給定的輸入檔案中進行讀入 一行乙個正整數n。輸出格式 將輸出資訊輸出到指定的檔案中 一行乙個整數表示...