nefu1010裸的尤拉函式

2021-07-04 06:42:31 字數 881 閱讀 5631

和這幾天做的題比簡直太小兒科了==

尤拉函式是指:對於乙個正整數n,小於n且和n互質的正整數(包括1)的個數,記作φ(n)。(互質:公約數只有1的兩個整數,叫做互質整數。唯一和1互質的數就是1本身)

尤拉函式的性質:它在整數n上的值等於對n進行素因子分解後,所有的素數冪上的尤拉函式之積。

通式:φ(x)=x*(1-1/p1)*(1-1/p2)*(1-1/p3)*(1-1/p4)…..(1-1/pn),其中p1,p2……pn為x的所有質因數,x是不為0的整數。φ(1)=1(唯一和1互質的數就是1本身)。(x=(p1^a1)*(p2^a2)*(p3^a3)*(p3^a3)……*(pk^ak)

對於質數p,φ(p) = p - 1。注意φ(1)=1.

尤拉定理:對於互質的正整數a和n,有a^φ(n) ≡ 1 mod n。

尤拉函式是積性函式——若m,n互質,φ(mn)=φ(m)φ(n)。

若n是質數p的k次冪,φ(n)=p^k-p^(k-1)=(p-1)p^(k-1),因為除了p的倍數外,其他數都跟n互質。

特殊性質:當n為奇數時,φ(2n)=φ(n)

尤拉函式還有這樣的性質:

設a為n的質因數,若(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)。

然後附上**:

#include   //尤拉之實現 

using namespace std; 

int main()  } 

} if(n>1) m=m/n*(n-1);  //先進行除法是為了防止中間資料的溢位

cout<

} return0; 

尤拉函式的推導

尤拉函式的定義 phi n 表示在1 n中與n互質的數 難點 與平常的遞推唯一不同的是 遞推不是由 n 1 推來,這給想出推理過程帶來了麻煩 如何充分使用互質這個概念,不像其他遞推能夠容易的列出遞推關係 分析 對互質的挖掘 兩個數的最大公約數 a,b 為 1 a,b 表示a,b的最大公約數 對構成b...

尤拉函式的求法

定義 尤拉函式f n 表示小於或等於n的數中與n互質的數的個數 通式 f n n 1 1 p1 1 1 p2 1 1 pn 其中p1,p2 pn為x的所有質因數,x是不為0的整數。1 1 唯一和1 互質的數 小於等於1 就是1本身 注意 每種質因數只乙個。比如12 2 2 3那麼 12 12 1 1...

尤拉函式的求法

long long eular long long n if n 1 ans ans n return ans const int maxn 1e5 const int branch 26 const int inf 0x3f3f3f3f const int mod 1e6 7 int euler ...