ACM 数论 欧拉定理证明 和 费马小定理 及其性质

欧拉函数 :
欧拉函数是数论中很重要的一个函数,欧拉函数是指:对于一个正整数 n ,小于 n 且和 n 互质的正整数(包括 1)的个数,记作 φ(n) 。 

完全余数集合:
定义小于 n 且和 n 互质的数构成的集合为 Zn ,称呼这个集合为 n 的完全余数集合。 显然 |Zn| =φ(n) 。


有关性质:
对于素数 p ,φ(p) = p -1 。
对于两个不同素数 p, q ,它们的乘积 n = p * q 满足 φ(n) = (p -1) * (q -1)  。
这是因为 Zn = {1, 2, 3,  ... , n - 1} - {p, 2p, ... , (q - 1) * p} - {q, 2q, ... , (p - 1) * q} , 则 φ(n) = (n - 1) - (q - 1) - (p - 1) =   p(q-1) - ( q-1)
=  (p -1) * (q -1)  =φ(p) * φ(q) 。( 类似于素数线性筛)


欧拉定理 :
对于互质的正整数 a 和 n ,有 a^φ(n)  ≡ 1 ( mod n )  。


证明:
( 1 ) 令 Zn = {x1, x2, ..., xφ(n)} , S = {a * x1 mod n, a * x2 mod n, ... , a * xφ(n) mod n} ,
        则 Zn = S 。
        ① 因为 a 与 n 互质, xi (1 ≤ i ≤ φ(n)) 与 n 互质, 所以 a * xi  与 n 互质,所以 a * xi  mod n ∈ Zn 。
        ② 若 i ≠ j , 那么 xi ≠ xj,且由 a, n互质可得 a * xi mod n ≠ a * xj mod n (消去律)。

( 2 ) ( a^φ(n)  ) * x1 * x2 *... * xφ(n) mod n 
      ≡ (a * x1) * (a * x2) * ... * (a * xφ(n) ) mod n
      ≡ (a * x1 mod n) * (a * x2 mod n) * ... * (a * xφ(n) mod n) mod n
      ≡  x1 * x2 * ... * xφ(n) mod n
      对比等式的左右两端,因为 xi  (1 ≤ i ≤ φ(n)) 与 n 互质,所以 a^φ(n)  ≡  1 (mod n)

    (消去律)。
注:

如果 gcd(c,p) != 1 ,则推不出来   ac ≡ bc mod p ⇒ a ≡ b mod p
消去律:如果 gcd(c,p) = 1 ,则 ac ≡ bc mod p ⇒ a ≡ b mod p 。


费马定理 :
若正整数 a 与素数 p 互质,则有 a^(p - 1) ≡ 1( mod p ) 。
证明这个定理非常简单,由于 φ(p) = p -1,代入欧拉定理即可证明。


补充:欧拉函数公式

( 1 ) pk 的欧拉函数

对于给定的一个素数 p , φ(p) = p -1。则对于正整数 n = p^k ,

φ(n) = p^k - p^(k -1)
 

证明:
小于 p^k 的正整数个数为 p^k - 1个,其中
和 p^k 不互质的正整数有{p * 1,p * 2,...,p * (p^(k - 1)  -1 ) } 共计 p^(k - 1 )- 1
所以 φ(n) = p^k - 1 - ( p^(k - 1) - 1) = p^k - p^(k - 1)  。

( 2 ) p * q 的欧拉函数

假设 p, q是两个互质的正整数,则 p * q 的欧拉函数为

φ(p * q) = φ(p) * φ(q) , gcd(p, q) = 1 。

证明:
令 n = p * q , gcd(p,q) = 1
根据中国余数定理,有
Zn 和 Zp × Zq 之间存在一一映射
(我的想法是: a ∈ Zp , b ∈ Zq ⇔ b * p + a * q ∈ Zn 。)
所以 n 的完全余数集合的元素个数等于集合 Zp × Zq 的元素个数。
而后者的元素个数为 φ(p) * φ(q) ,所以有
φ(p * q) = φ(p) * φ(q) 。

( 3 ) 任意正整数的欧拉函数

任意一个整数 n 都可以表示为其素因子的乘积( 运用算术基本定理 ):

 设 n =( p1^a1)*(p2^a2)…(pk^ak)为正整数 n 的素数幂分解,

     那么ϕ(n) = n( 1−1/p1 )( 1−1/p2 )…( 1−1/pk )  ,

 注意:n = (p1^a1)*(p2^a2)…(pk^ak) 
 而   : ϕ(pk^ak)=(pk^ak)−( pk^(ak−1)  )=( pk^ak )( 1−1/pk ) 
 证明:

 因为      ϕ( n ) = ϕ(p1^a1)ϕ(p2^a2)…ϕ(pk^ak),

 又因为   ϕ(pk^ak) =(pk^ak)−(pk^ (ak −1 ) )

 于是有 : ϕ(n) =( p1^a1)*( p2^a2 )…( pk^ak )(1−1/p1)(1−1/p2)

                 …(1−1/pk) =  n( 1−1/p1)(1−1/p2)…(1−1/pk)

 故 ,      ϕ(n) = n( 1−1/p1 )( 1−1/p2 )…( 1−1/pk ) 得证

欧拉函数模板

// 直接求
long long Euler( long long n ){
  	 long long res = n;
	 for( long long i =2 ;i*i<=n;i++){
	 	if( n %i == 0 ){
			n/=i;
			res = res - res/i;
		}
 		while( n % i==0)
		 n/=i;
	 }
     if( n > 1 )
	     res = res - res/n;
     return res;
}

 

 

 

 

你可能感兴趣的:(学习笔记)