尤拉函式用來求 在小於x的正整數且與x互質(公約數只有1)的數的個數,一般用φ(x)表示,這個φ(x)就是尤拉函式,也就是用來解決 「在1-x之間有多少個數與x構成互質關係」的問題
特別的,φ(1)=1,∏ 是直積符號,表示連乘
其中p1,p2…pi…pn為x的所有質因數,x是乙個正整數
根據唯一分解定理,我們可以把乙個整數唯一地分解為多個質數冪次的乘積,即
任取其中乙個因數,即t=pk,那麼如果將t分解為長度為p的若干段,則能分成pk/p段,也就是p(k-1)段,那麼這每一段裡,由於p本身是質數,那麼將有p-1個數與t互質(因為除了1),所以比t小且與t互質的數就有p(k-1)∗(p-1)這麼多,也就是φ(t)=p(k-1)∗(p-1),也是尤拉函式的特殊情況
把這種特殊情況的結論帶入求φ(x)中的話,x分解出的每乙個piai都可以看成乙個ti,然後許多個ti相乘,每個ti都是只有乙個質數的冪次的特殊情況,即t1=p1a1,t2=p2a2,那麼可以把唯一分解定理的形式寫成 x= t1∗t2∗t3∗… ∗tn,也就是
然後對其套用特殊情況的結論進行證明:
由此我們得到且證明了尤拉函式:
有關證明這裡不展開了,大部分情況了解就行
尤拉函式是積性函式,但不是完全積性函式:
對於質數p,φ(p)= p-1;
若p是質數且t=p(k-1),φ(t)=p(k-1)∗(p-1),也就是證明過程中的特殊情況結論
n>2時,φ(x)是偶數;
小於n的數中,與n互質的數的總和為:φ(n) * n / 2 (n>1);
x的因數(包括1和它自己)的尤拉函式之和等於x,即x=∑d∣x φ(d) ,其中d∣x是x能被d整除的意思。
在以上公式中很顯然,需要得知的量就是pi,也就是x的所有質因數,找出比x小的所有質數我們可以用篩法,再加一層判斷是否是因數就行了,所以之前學的尤拉篩就可以排上用場了
情況1:如果p為質數且p為x的因數,那麼
情況2:如果p不是x的因數,即p,x互質,那麼根據積性函式性質
所以**如下(一定要會寫,很有用):
//尤拉篩法求尤拉函式,建議對照尤拉篩法**一起看
const
int n =
1005
;int phi[n]
;//φ
bool isprime[n]
;int primes[n]
;int cnt;
void
euler
(int n)
for(
int j =
1; j <= cnt && primes[j]
* i <= n; j++
)//prime[j]表示當前推到的質數
else phi[i * primes[j]
]= phi[i]
* phi[primes[j]];
//情況2,否則兩個因子互質了,就可以利用尤拉函式是積性函式的性質 }}
}
關於互質數
自然數m,n,m 1,x n 1,y 求m,n互質 即m,n 最大公約數為1 的概率 x,y 驅於無窮大時,此概率的極限為6 2 function getpmn byval x as long,y as long as double dim a as byte,i as long,temp as d...
關於互質數
自然數m,n,m 1,x n 1,y 求m,n互質 即m,n 最大公約數為1 的概率 x,y 驅於無窮大時,此概率的極限為6 2 function getpmn byval x as long,y as long as double dim a as byte,i as long,temp as d...
尤拉函式求互質數個數
求解與n 1 n 1 互質的質因子的個數 解析 定義 對於正整數n,n 是小於或等於n的正整數中,與n互質的數的數目。例如 8 4,因為1,3,5,7均和8互質。性質 1.若p是質數,p p 1.2.若n是質數p的k次冪,n p 1 p k 1 因為除了p的倍數都與n互質 3.尤拉函式是積性函式,若...