ch3 數學 尤拉函式

2021-10-24 01:29:57 字數 1543 閱讀 4131

1.自然語言描述

自然數n的尤拉函式指1~n之間所有與n互質的數的個數;比如,6的尤拉函式值為2。

尤拉函式表示式:phi(n) = n * (1 - 1/p1) * (1 - 1/p2) * (1-1/p3) * … * (1-1/pk)

p為質因子的底數。用容斥原理證明:展開這個表示式,phi(n) = n - n/p1 - n/p2 - … - n/pk + n/(p1p2) + n/(p1p3) + … + n/(p(k-1)*pk) - …這樣的形式,即在1~n這n個數中去掉所有不與n互質的數,首先去掉含1個質因子相同的那些數,但這樣做會重複地去掉一些含2個質因子相同的數,所以要補回來(加上),同理這樣做會額外加了含3個質因子相同的數,還得減去它們······直至處理到含所有質因子的數。這樣得到的就是1 ~ n中所有與n互質的數的個數。

篩法求尤拉函式:在素數篩上改動,讓它在篩素數的同時求出每個數的尤拉函式值。

2.**描述

#include

#include

#include

#include

using

namespace std;

typedef

long

long ll;

intmain

(void)if

(x>1)

res=

(x-1

)*res/x;

cout<}return0;

}

#include

#include

#include

#include

#include

using

namespace std;

const

int maxn=

1e6+10;

typedef

long

long ll;

int n,primes[maxn]

,cnt,phi[maxn]

;//phi[i]為i的尤拉函式值

bool st[maxn]

;int

main

(void

)for

(int j=

0;primes[j]

<=n/i;j++

) phi[i*primes[j]

]=phi[i]

*(primes[j]-1

); mod pj !=0 :pj仍為i*pj的最小質因子,但未出現過(即phi(i)中未出現(1-1/pj)項)

}//所以phi(i*pj) = pj*phi(i)*(1-1/pj) = phi(i)*(pj-1)

}

ll ans=0;

for(

int i=

1;i<=n;i++

) ans+

=phi[i]

; cout

}

ch3 數學 容斥原理

1.自然語言描述 在概率論課程中,容斥原理作為定理出現過 以最簡單的情況舉例 兩個事件a,b,a b a b a b 三個事件a,b,c,a b c a b c a b a c b c a b c 推廣到任意多個事件 容斥原理可以不重複 不遺漏地得到計算結果。2.描述 include include...

演算法筆記ch3

題目描述 有兩個日期,求兩個日期之間的天數,如果兩個日期是連續的,則規定它們之間的天數為兩天。解題思路 這種求日期之間相差天數的題目有乙個很直接的思路,即令日期不斷加1天,直到第乙個日期等於第二個日期為止,即可統計出答案。如果想要加快速度,只需要先把第乙個日期的年份不斷加1,直到與第二個日期的年份相...

尤拉函式學習

學習尤拉函式首先要理解線性篩。普通的篩法就不記錄了。bool number maxn 5 void isprime int prime maxn 5 int i,j,c 0 memset number,true,sizeof number for i 2 i maxn i if number i p...