欧拉函数 (φ φ ),读法为 fai(四声)。
定义
φ ( n ) φ ( n ) 表示有多少个不大于 n n 的正整数与 n n 互质。 特别的 φ ( 1 ) = 1 φ ( 1 ) = 1 。
性质:
积性函数,及如果有 a ⊥ b a ⊥ b , 就有 φ ( a × b ) = φ ( a ) × φ ( b ) φ ( a × b ) = φ ( a ) × φ ( b ) 。
证明:
如果有 a ⊥ b a ⊥ b ,那么 a a 和 b b 就没有大于 1 1 的公因数,于是就有这个积性函数的性质。
也可以看下面的性质三推式子:
令 a = p k 1 1 × p k 2 2 × ⋯ p k m m a = p 1 k 1 × p 2 k 2 × ⋯ p m k m , b = q w 1 1 × q w 2 2 × ⋯ q w u m b = q 1 w 1 × q 2 w 2 × ⋯ q m w u
∵ a ⊥ b ∴ ∵ a ⊥ b ∴ 没有任何一个 p p 和任何一个 q q 相同。
φ ( a × b ) = ∏ i ≤ m i = 1 p i − 1 p i × ∏ i ≤ u i = 1 q i − 1 q i = φ ( a ) × φ ( b ) φ ( a × b ) = ∏ i = 1 i ≤ m p i − 1 p i × ∏ i = 1 i ≤ u q i − 1 q i = φ ( a ) × φ ( b ) 。
∀ n ∈ P ∀ n ∈ P ,φ ( n k ) = n k − n k − 1 = n k × ( 1 − p − 1 ) = n k × ( 1 − 1 p ) φ ( n k ) = n k − n k − 1 = n k × ( 1 − p − 1 ) = n k × ( 1 − 1 p )
证明:
可以知道 [ 1 , n k ] [ 1 , n k ] 里面一共有 n k n k 个数。其中因为 n ∈ P n ∈ P ,所以满足 x | n x | n 的数是 n k n k 的因数,这些数为 n , n 2 , n 3 ⋯ n k − 1 × n n , n 2 , n 3 ⋯ n k − 1 × n ,显然一共有 n k − 1 n k − 1 个数,减去这 n k − 1 n k − 1 个数就可以得到 φ ( n k ) φ ( n k ) 。
令 n = p k 1 1 × p k 2 2 × p k 3 3 × ⋯ p k r r n = p 1 k 1 × p 2 k 2 × p 3 k 3 × ⋯ p r k r ,则有 φ ( n ) = n × ∏ i ≤ r i = 1 p i − 1 p i φ ( n ) = n × ∏ i = 1 i ≤ r p i − 1 p i 。
证明:
容斥原理:
假设有 n n 有两个质因数 a , b a , b ,那么对于 x ∈ [ 1 , n ] x ∈ [ 1 , n ] ,有 n a n a 个数是 a a 的因数, 有 n b n b 个数是 b b 的因数,有 n a × b n a × b 个数是 a × b a × b 的因数。显然只考虑 a , b a , b 的因数就有 n − n a − n b + n a × b n − n a − n b + n a × b 个数与 n n 互质。其中因为 a × b a × b 的因数被算了两次,所以这里我们将其减去。对于多个质因数我们也可以这样算。同时,上面的式子还可以用十字相乘化简 n × ( 1 − 1 a − 1 b + 1 a × b ) = n × ( 1 − 1 a ) × ( 1 − 1 b ) n × ( 1 − 1 a − 1 b + 1 a × b ) = n × ( 1 − 1 a ) × ( 1 − 1 b ) 。可得上面的公式。
利用性质 2:
通过性质 1 可以知道 φ ( n ) = φ ( p k 1 1 ) × φ ( p k 2 2 ) ⋯ × φ ( p k r r ) = ( p k 1 1 × ( 1 − 1 p 1 ) ) × ( p k 2 2 × ( 1 − 1 p 2 ) ) ⋯ × ( p k r r × ( 1 − 1 p r ) ) = p k 1 1 × p k 2 2 × ⋯ × p k r r × ( 1 − 1 p 1 ) × ( 1 − 1 p 2 ) × ⋯ × ( 1 − 1 p r ) = n × ∏ i ≤ r i = 1 p i − 1 p i φ ( n ) = φ ( p 1 k 1 ) × φ ( p 2 k 2 ) ⋯ × φ ( p r k r ) = ( p 1 k 1 × ( 1 − 1 p 1 ) ) × ( p 2 k 2 × ( 1 − 1 p 2 ) ) ⋯ × ( p r k r × ( 1 − 1 p r ) ) = p 1 k 1 × p 2 k 2 × ⋯ × p r k r × ( 1 − 1 p 1 ) × ( 1 − 1 p 2 ) × ⋯ × ( 1 − 1 p r ) = n × ∏ i = 1 i ≤ r p i − 1 p i 。
所有不大于 n n 的数中与 n n 互质的数的和为 n × φ ( n ) 2 n × φ ( n ) 2
证明:
由 gcd ( n , x ) = gcd ( n , n − x ) gcd ( n , x ) = gcd ( n , n − x ) 可知,当一个数 x x 满足 gcd ( n , x ) = 1 gcd ( n , x ) = 1 时,就会有一个数 n − x n − x 满足 gcd ( n , n − x ) = 1 gcd ( n , n − x ) = 1 ,及这些数是成对出现的,他们的平均数是 ( n − x + x ) ÷ 2 ( n − x + x ) ÷ 2 即 n 2 n 2 ,因为一共有 φ ( n ) φ ( n ) 个数与 n n 互质,所以他们的和就是 n × φ ( n ) 2 n × φ ( n ) 2 。
欧拉反演:∑ x | n φ ( x ) = n ∑ x | n φ ( x ) = n 。
证明
设 f ( n ) = ∑ x | n φ ( x ) f ( n ) = ∑ x | n φ ( x ) ,则有 f f 是一个积性函数。
∀ n ⊥ m , f ( n × m ) = ∑ x | n × m φ ( x ) = ∑ x | n φ ( x ) × ∑ x | m φ ( x ) = f ( n ) × f ( m ) ∀ n ⊥ m , f ( n × m ) = ∑ x | n × m φ ( x ) = ∑ x | n φ ( x ) × ∑ x | m φ ( x ) = f ( n ) × f ( m ) 。
于是 f ( n ) = ∏ i ≤ r i = 1 f ( p k i i ) f ( n ) = ∏ i = 1 i ≤ r f ( p i k i )
先研究 l ∈ P , f ( l k ) l ∈ P , f ( l k ) , 发现其中满足是 l l 的因数的数有 1 , l , l 2 , l 3 ⋯ l k 1 , l , l 2 , l 3 ⋯ l k 及 f ( l k ) = φ ( 1 ) + φ ( l ) + φ ( l 2 ) + φ ( l 3 ) ⋯ + φ ( l k ) f ( l k ) = φ ( 1 ) + φ ( l ) + φ ( l 2 ) + φ ( l 3 ) ⋯ + φ ( l k ) ,有性质 2 可知 f ( l k ) = 1 + l − l 0 + l 2 − l 1 + ⋯ + l k − l k − 1 f ( l k ) = 1 + l − l 0 + l 2 − l 1 + ⋯ + l k − l k − 1 可以发现其中的项相互抵消了,最后只剩下了 l k l k ,即 ∀ x ∈ P , f ( x k ) = x k ∀ x ∈ P , f ( x k ) = x k 。
于是就有 f ( n ) = ∏ i ≤ r i = 1 f ( p k i i ) = ∏ i ≤ r i = 1 p k i i = n f ( n ) = ∏ i = 1 i ≤ r f ( p i k i ) = ∏ i = 1 i ≤ r p i k i = n 。 即 ∑ x | n φ ( x ) = n ∑ x | n φ ( x ) = n 。
如果有 p p 为质数, p ∣ n p ∣ n 并且有 p 2 ∣ n p 2 ∣ n 于是就有 φ ( p ) = φ ( n p ) × p φ ( p ) = φ ( n p ) × p 。
证明
可以把 n n 看作 x × p 2 x × p 2 ,于是 n p = x × p n p = x × p ,可以发现除了指数不一样,其他的因数都是一样的,而欧拉函数计算的表达式中只和因数 有关,而不是和指数有关,于是这里就可以得到两个式子,φ ( p ) = p × ∏ i ≤ r i = 1 p i − 1 p i , φ ( n p ) = n p × ∏ i ≤ r i = 1 p i − 1 p i φ ( p ) = p × ∏ i = 1 i ≤ r p i − 1 p i , φ ( n p ) = n p × ∏ i = 1 i ≤ r p i − 1 p i ,于是就有 φ ( p ) φ ( n p ) = p φ ( p ) φ ( n p ) = p ,化简一下就和上面的式子一样了。
如果有 p p 为质数, p ∣ n p ∣ n ,但是有 p 2 ∤ n p 2 ∤ n ,有 φ ( p ) = φ ( n p ) × ( p − 1 ) φ ( p ) = φ ( n p ) × ( p − 1 ) 。
证明
因为有 p 2 ∤ n p 2 ∤ n ,于是就有 p ∤ n p p ∤ n p ,于是 p ⊥ n p p ⊥ n p ,由于 φ φ 是积性函数,于是就有 φ ( n ) = φ ( n p ) × φ ( p ) φ ( n ) = φ ( n p ) × φ ( p ) ,又因为 p p 是质数,于是 φ ( p ) = p − 1 φ ( p ) = p − 1 ,于是既有上面的结论乐。
怎么求
首先就有一种简单的方式求单个的,对于一个数,我们将其分解质因数,带进公式里面,然后就发现做完了。
还有一种更加合理的方法可以在 O ( n ) O ( n ) 的复杂度里面解决 [ 1 , n ] [ 1 , n ] 的欧拉函数,具体思想就是线性筛。
我们知道,线性筛可以得到一个数的最小质因数,然后我们就可以通过性质 6 和性质 7 对其进行递推求解,具体代码见下:
phi[1 ] = 1 ;
rep (i, 2 , n) {
if (!pri[i]) {
pri[++pri[0 ]] = i;
phi[i] = i - 1 ;
}
rep (j, 1 , pri[0 ]) {
pri[i * pri[j]] = 1 ;
if (i % pri[j] == 0 ) {
phi[i * pri[j]] = phi[i] * pri[j];
break ;
}
phi[i * pri[j]] = phi[i] * (pri[j] - 1 );
if (pri[j] * i > n) break ;
}
}
本文作者:落花月朦胧
本文链接:https://www.cnblogs.com/falling-flowers/p/17180712.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议 进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步