尤拉函式的定義:euler(k)=([1,n-1]中與n互質的整數個數).
eg:euler(8)=4,因為1,3,5,7均和8互質。
可以推出以下公式:
euler(k)=(p1-1)(p2-1)……(pi-1)*(p1^(a1-1))(p2^(a2-1))……(pi^(ai-1))
=k*(p1-1)(p2-1)……(pi-1)/(p1*p2*……pi);
=k*(1-1/p1)*(1-1/p2)....(1-1/pk)
故euler函式表達通式:
euler(x)=x(1-1/p1)(1-1/p2)(1-1/p3)(1-1/p4)…(1-1/pn)
,其中p1,p2……pn為x的所有素因數,x是不為0的整數。euler(1)=1(唯一和1互質的數就是1本身)。
根據以上性質可以推出:
若(n%a==0 && (n/a)%a==0) 則有:e(n)=e(n/a)*a;
若(n%a==0 && (n/a)%a!=0) 則有:e(n)=e(n/a)*(a-1);
尤拉公式的延伸:
乙個數的所有質因子之和是
euler(n)*n/2。
乙個質數n的尤拉函式是n-1
下面給出求euler函式的程式:
//直接求解尤拉函式,返回euler(n)
int euler(int n)
}if(a>1) res=res/a*(a-1);
return res;
}
在給出乙個篩法打euler函式表:
//篩選法打尤拉函式表
#define max 1000001
int euler[max];
void init(){
euler[1]=1;
for(int i=2;i
poj3090**
數論 尤拉函式
尤拉函式,用 n 表示 尤拉函式是求小於等於n的數中與n互質的數的數目 求n的尤拉函式時我們可以減去它的所有素數因子以及它的倍數 12 12 2 2 3 素數因子有2 3所以我們減掉2,3的倍數 2的倍數 2,4,6,8,10,12 3的倍數 3,6,9,12 顯然2,3存在重複項6,12 根據容斥...
數論 尤拉函式
ll eular ll n if n 1 ans ans n n 1 return ans 尤拉函式的一些性質 當m,n互質時,有phi m n phi m phi n 若i p 0,有phi i p p phi i 對於互質x與p,有x phi 1 mod p 因此x的逆元為x phi 1 即尤拉...
數論 尤拉函式
大佬已經講的很清楚了,證明非常清晰 互質 兩個數的最大公約數為 1 稱這兩個數互質 求乙個數的尤拉函式 利用公式 int phi int n if a 1 ans ans n n 1 return ans 方法二 利用線性篩求多個數的尤拉函式 const int ma 1e5 5 bool book...