2018 5 26(尤拉函式)

2021-08-20 06:54:45 字數 994 閱讀 6884

在數論中,對正整數n,尤拉函式是小於或等於n的數中與n互質的數的數目。

n的尤拉函式值記為 phi(n)

例如 phi(8)=4 (4個與8互質的數分別為 1 3 5 7)

通式:,其中p1, p2……pn為x的所有質因數,x是不為0的整數。φ(1)=1(唯一和1互質的數(小於等於1)就是1本身)。 (注意:每種質因數只乙個。比如12=2*2*3那麼φ(12)=12*(1-1/2)*(1-1/3)=4

故求phi(x)模板為:

int phi(int x)  

} if(x>1)//篩後有剩餘的數,說明這個數也是乙個質因子

ans-=ans/x;//同理套公式

return ans;//答案

}

在這裡解釋一下為什麼要列舉每個數:

很簡單本模板中「從小到大列舉每個數「和」從小到大列舉每個質數「是一樣的

因為所有合數都可以被分解為質數相乘的形式。

注意到while(x%i==0) x/=i;

x每次都會篩去質因子,

比如在phi(8)

4這個合數因子,已經在篩2這個質因子時篩去了

因為4=2*2,而篩到2時,所有的因子2已被篩去。

此時,phi(x)中x的值已經改變,不再是8。

篩到4的時候x%4不會==0。

那麼如果我們需要打出phi(maxn)的錶該怎麼做呢?不用把上面的模板從1迴圈到maxn。我們有更機智的做法。

模板:int p[maxn];

void phi(){

for(int i=1;ifor(int i=2;iif(p[i]==i){

for(int j=i;j如果你會素數篩的話,恭喜你,這就是個素數篩。

只不過在素數篩中我們篩出的每個素數是用來存起來的

而在這裡我們篩出的每個素數

作為乙個素因子

「主動地」去找包含這個素因子的數

然後套公式。

源部落格

尤拉函式 尤拉定理

尤拉函式 對正整數 n,尤拉函式 是小於等於 n的數中與 n互質的數的數目 此函式以其首名研究者尤拉命名 euler so totientfunction 它又稱為 euler stotient function 函式 尤拉商數等。例如 8 4,因為 1,3,5,7均和8 互質。注 n為1時尤拉函式...

尤拉函式 尤拉定理

尤拉函式 設 n 為正整數,則 1,2,n 中與 n 互素的整數的個數計作 n 叫做尤拉函式。設 p 是素數,p p 1設 p 是素數,pa pa p a 1 設 p,q 是不同的素數,n q p,n p q 即 n p 1 q 1 設 m,n 是兩個正整數,且 m,n 1,若 n m n,n m ...

尤拉函式尤拉篩

尤拉函式求小於等於n與n互質的數的個數 複習時發現這個知識點竟然沒有整理 n為素數即為n 1 除了其本身 n為素數的倍數 ola sushu j i ola i sushu j else ola sushu j i ola i sushu j 1 include include include in...