1. 程式人生 > >尤拉函式總結

尤拉函式總結

尤拉函式的定義:對正整數n,尤拉函式是小於或等於n的正整數中與n互質的數的數目。例如euler(8)=4,因為1,3,5,7均和8互質。

Euler函式表達通式:euler(x) = x(1-1/p1)(1-1/p2)(1-1/p3)(1-1/p4)…(1-1/pn),其中p1,p2……pn為x的所有素因數。

euler(1) = 1(唯一和1互質的數就是1本身)。當x為素數時 euler(x) = x-1。

求法:

直接分解質因數按公式求:

inline int Euler(int x){
	int re = x;
	for(int i=2 ; i*i<=x ; ++i){
		if(x%i == 0){
			re = re/i*(i-1);//先除後乘防止溢位 
			while(x%i == 0)x /= i;
		}
	}
	if(x > 1)re = re/x*(x-1);
	return re;
}