设 m 是一个正整数,则 m 个整数 0,1,..., m-1 中与 m 互素的整数的个数,记为 f(m),通常叫做欧拉函数。
欧拉函数有很多性质:
1) f(pk)= pk- pk-1 ,p 为素数
证明:1 到 pk 范围中,除 p 的倍数外,其它数都与 pk 互素,因为 p 是素数。故 f(pk)= pk- pk-1。
2) f(m) 为积性函数,即 f(m* n)= f(m)* f(n),若 m, n 互质
证明略。
3) 设正整数 n 有标准因数分解式为 n= p1a1 * p2a2 *... * pkak,
则 f(m)= n*( 1- 1/ p1 )* ( 1- 1/ p2 )* ... * ( 1- 1/ pk ) 。
证明:f(n)= f(p1a1)* f(p2a2)* ... * f(pkak) // // 积性函数性质
= ( p1a1- p1a1- 1 )* (p2a2- p2a2-1)* ... * (pkak- pkak-1) // 由性质一
= p1a1 * p2a2 *... * pkak * ( 1- 1/ p1 )* ( 1- 1/ p2 )* ... * ( 1- 1/ pk ) // 除以 piai
= n* ( 1- 1/ p1 )* ( 1- 1/ p2 )* ... * ( 1- 1/ pk )
4) 设 n 是一个正整数, å f(d)= n , 其中 d| n, 且 d> 0
证明: 令函数 F(pn)= f(1)+ f(p)+ f(p2)+ ... + f(pn), 其中 p 为质数。
则由 性质一 有: F(pn)= 1- 0+ p- 1+ p2- p+ ... + pn- pn-1 = pn
n= p1a1 * p2a2 *... * pkak // 标准因式分解
= F(p1a1)* F(p2a2)* ... * F(pkak )
= å f(d)
5) 设 p, n 为正整数且 p 为 n 的质因数,有
1. 如果 n% p2= 0,则 f(n)= f(n/ p)* p。
2. 如果 n% p== 0 && n% p2!= 0,则 f(n)= f(n/ p)* (p- 1)
证明 1:f(n)= f(p1a1 * p2a2 *... * pkak) // 标准因式分解
= f(p1a1)* f(p2a2)* ... * f(pkak) // 积性函数性质
= ( p1a1- p1a1- 1 )* (p2a2- p2a2-1)* ... * (pkak- pkak-1) // 由性质一
易知, p 必定与 p1 ... pk 中某一个相等,假设为 p1。
则 f(n/p)= ( p1a1- 1- p1a1- 2 )* (p2a2- p2a2-1)* ... * (pkak- pkak-1)
= ( p1a1- p1a1- 1 )* (p2a2- p2a2-1)* ... * (pkak- pkak-1) / p
= f(n)/ p
所以有 f(n)= f(n/ p)* p
证明 2: 易知 p 与 n/ p 互素,所以 f(n)= f(n/ p)* f(p)= f(n/ p)* (p- 1)
由性质 5:我们可以得到计算欧拉函数的算法,代码如下: