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

2021-10-14 17:08:58 字數 893 閱讀 9356

數論中的尤拉函式

對於尤拉函式,主要有如下性質:

我們來證明第乙個性質: 在不大於

與之互質的只有

至於第二個性質,設那

第三個性質的證明需要用到複雜一些的數論知識,這裡不證了,可參見這篇部落格。符合這種性質的數論函式稱為積性函式

我們把正整數質因數分解

所有 兩兩互質,由尤拉函式的性質有:

即:用這個方法可以以最壞時間複雜度

內求得指定正整數的尤拉函式值。

int phi(int n)

if (n > 1)

res = res / n * (n - 1); // 最後剩下的部分也是原來的n的質因數

return res;

}

我們還可以把求尤拉函式與篩法結合起來,例如用類似埃氏篩的方法,求1~n的尤拉函式:

int phi[maxn];

void init(int n)

可以保證範圍內每個數都能被它的所有質因數篩且只篩一次。注意乙個正整數

是質數的充要條件是

,所以我們其實順路篩出了所有素數。這個方法的複雜度是

,比乙個乙個求的

優秀。當然也可以在尤拉篩途中順便求出:

void init(int n)

else

phi[p * i] = phi[p] * phi[i]; // 這時肯定互質,用性質三}}

}

這裡沒有進行質因數分解,綜合運用了開頭提到的三種性質,時間複雜度為

pecco:演算法學習筆記(目錄)​zhuanlan.zhihu.com

小白演算法學習 尤拉函式

請思考以下問題 任意給定正整數n,請問在小於等於n的正整數之中,有多少個與n構成互質關係?比如,在1到8之中,有多少個數與8構成互質關係?計算這個值的方法就叫做尤拉函式,以 n 表示。在1到8之中,與8形成互質關係的是1 3 5 7,所以 n 4。n 的計算方法並不複雜,但是為了得到最後那個公式,需...

尤拉函式演算法

尤拉函式 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。輸出格式 將輸出資訊輸出到指定的檔案中 一行乙個整數表示...