數論中的尤拉函式
對於尤拉函式,主要有如下性質:
我們來證明第乙個性質: 在不大於
不與之互質的只有
至於第二個性質,設那
第三個性質的證明需要用到複雜一些的數論知識,這裡不證了,可參見這篇部落格。符合這種性質的數論函式稱為積性函式。
我們把正整數質因數分解:
所有 兩兩互質,由尤拉函式的性質有:
即:用這個方法可以以最壞時間複雜度
內求得指定正整數的尤拉函式值。
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。輸出格式 將輸出資訊輸出到指定的檔案中 一行乙個整數表示...