歐拉函數的定義:phi(n)表示在1~n中與n互質的數
難點:
& 與平常的遞推唯一不同的是:遞推不是由(n-1)推來,這給想出推理過程帶來了麻煩
& 如何充分使用互質這個概念,不像其他遞推能夠容易的列出遞推關係
分析:
&對互質的挖掘:
& 兩個數的最大公約數(a,b)爲 1 ( (a,b)表示a,b的最大公約數)
& 對構成b的所有素因子,a都不能整除它們
由這裏可以得到一個很顯然的推論:如果構成a,b的素因子集合相同,那麼任意的一個數與a,b的關係是: 同時與其互質或者同時不與其互質
& 上面經常出現的字眼“素因子”,是否在提示我們遞推式與素因子有關呢?
假設: n=p*m (p 爲素數)
提示我們:phi(n),phi(m)是否存在遞推式呢?
答案是肯定的:
(1)1~n中與m互質的數目與phi(m)有什麼關係呢?
將1~n 可以分成p份: (1,m) , (m+1,2m),……( (p-1)*m,p*m )
爲何這樣分呢? 你將發現 每份中與m互質的數目是相同的
因爲 如果 (b,m)=1,那麼(b+t*m,m)=1( b+t*m 無法整除m中任意素因子,模運算的分配率)
(2) 現在考慮一個問題:(b,m)=1,那麼(b,n)=1麼?
從剛剛的互質出發: 如果構成m的素因子集合包含p,那麼構成n,m的素因子集合是相同的,
因此上式成立,否則當b能整除p時,上面顯然不成立(存在公有素因子p)。故:
m%p=0時 :phi(n)=phi(m)*p(一共有p份)
m%p!=0時:phi(n)=phi(m)*p-{與m互質但是p的倍數的數}
{與m互質但是p的倍數的數}=phi(m)(p,2*p,3*p,……,m*p中選取,等效1~m求與m互質的數目)
這phi(n)=phi(m)*(p-1)
最終得到遞推式:
m%p=0時 :phi(n)=phi(m)*p
m%p!=0時:phi(n)=phi(m)*(p-1)
遞推求出通項公式:
phi(n)=∏ pi^(ki-1)*(pi-1) ({pi}爲n的所有素因子)