• `算法知识` 欧拉函数, 积性函数


    官方链接

    oi-wiki

    数论函数

    数论里的函数 (积性函数, 欧拉函数等), 定义域都是 正整数
    … 因为数论一般研究的都是: 自然数.
    … 包括下面涉及的所有函数/变量, 都默认是在 (正整数)域的.

    所以, 数论函数 也可以看成是一个 数列, 故, 一般写成 f ( n ) f(n) f(n), 而不是 f ( x ) f(x) f(x)

    积性函数

    若函数 f ( n ) f(n) f(n) 满足 f ( 1 ) = 1 f(1)=1 f(1)=1 ∀ ( x , y ) 互质 \forall (x,y)互质 (x,y)互质 都有 f ( x y ) = f ( x ) f ( y ) f(xy)=f(x)f(y) f(xy)=f(x)f(y),则 f ( n ) f(n) f(n)积性函数
    … 可以发现, 积性函数互质 是联系一起的; 只有两者互质, 才符合积性.

    若函数 f ( n ) f(n) f(n) 满足 f ( 1 ) = 1 f(1)=1 f(1)=1 ∀ x , y \forall x,y x,y 都有 f ( x y ) = f ( x ) f ( y ) f(xy)=f(x)f(y) f(xy)=f(x)f(y),则 f ( n ) f(n) f(n)完全积性函数


    积性函数的例子:

    • 欧拉函数
    • 约数函数: F( x)表示x这个数的约数个数, 他等于: (a1 + 1) * (a2 + 1) * ... (ai为各个质因子的量级)
      … 令Pow( x)为: x的最小的质因子的量级.
      if( i % Prime[ j] == 0){
      	F[ Prime[ j] * i] = F[ i] / Pow[ i] * ( Pow[ i] + 1);
      }
      else{
      	F[ Prime[ j] * i] = F[ i] * 2;
      }
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
    • 约数之和函数: F( x)表示x这个数的 所有约数之和, 他等于: ( 1 + p 1 + p 1 2 + . . . ) ∗ ( 1 + p 2 + p 2 2 + . . . ) . . . (1 + p_1 + p_1^2 + ...) * ( 1 + p_2 + p_2^2 + ...) ... (1+p1+p12+...)(1+p2+p22+...)...
      Min( x)为: x的 ( 1 + p 1 + p 1 2 + . . . ) ,    p 1 为其最小质因子 (1 + p_1 + p_1^2 + ...), \ \ p_1为其最小质因子 (1+p1+p12+...),  p1为其最小质因子

    欧拉函数

    欧拉函数 ϕ ( x ) \phi( x) ϕ(x), 定义域为 正整数, 表示: 在[1, x]内, 有多少整数与x互质.

    ϕ ( 1 ) = 1 = 1 \phi( 1) = {1} = 1 ϕ(1)=1=1 (1与任何数互质, 包括自身)
    ϕ ( 2 ) = 1 = 1 \phi( 2) = {1} = 1 ϕ(2)=1=1
    ϕ ( 3 ) = 1 , 2 = 2 \phi( 3) = {1, 2} = 2 ϕ(3)=1,2=2
    ϕ ( 4 ) = 1 , 3 = 2 \phi( 4) = {1, 3} = 2 ϕ(4)=1,3=2
    ϕ ( 5 ) = 1 , 2 , 3 , 4 = 4 \phi( 5) = {1, 2, 3, 4} = 4 ϕ(5)=1,2,3,4=4

    如果x是质数, 显然其 ϕ ( x ) = x − 1 \phi( x) = x-1 ϕ(x)=x1, 除了x, 所有[1, x-1]范围的数 都与x互质.

    性质

    • 欧拉函数 是 积性函数.
      ϕ ( 12 ) = 4 , ϕ ( 2 ) = 1 , ϕ ( 6 ) = 2 , ϕ ( 3 ) = 2 , ϕ ( 4 ) = 2 \phi( 12) = 4, \phi( 2) = 1, \phi( 6) = 2, \phi( 3) = 2, \phi( 4) = 2 ϕ(12)=4,ϕ(2)=1,ϕ(6)=2,ϕ(3)=2,ϕ(4)=2
      因为3, 4互质, 但是2, 6不是互质的.
      故, ϕ ( 3 ) ∗ ϕ ( 4 ) = 4 = ϕ ( 12 ) \phi( 3) * \phi( 4) = 4 = \phi( 12) ϕ(3)ϕ(4)=4=ϕ(12), 但是, 从 ϕ ( 2 ) ∗ ϕ ( 6 ) \phi( 2) * \phi( 6) ϕ(2)ϕ(6)并不能推出 ϕ ( 12 ) \phi(12) ϕ(12), 因为两者不互质.
      证明: 简单证明, 如果你知道欧拉函数的公式的话
      … 对于任意一个数, 其欧拉函数公式为: ϕ ( p 1 k 1 ∗ p 2 k 2 ∗ p 3 k 3 . . . ) = ( p 1 k 1 ∗ p 2 k 2 ∗ p 3 k 3 . . . ) ∗ p 1 − 1 p 1 ∗ p 2 − 1 p 2 ∗ p 3 − 1 p 3 ∗ . . . \phi( p_1^{k_1} * p_2^{k_2} * p_3^{k_3} ...) = ( p_1^{k_1} * p_2^{k_2} * p_3^{k_3} ...) * \frac{ p_1 - 1}{ p_1} * \frac{ p_2 - 1}{ p_2} * \frac{ p_3 - 1}{ p_3} * ... ϕ(p1k1p2k2p3k3...)=(p1k1p2k2p3k3...)p1p11p2p21p3p31...
      … 合并同类项后, : ( p 1 k 1 ∗ p 1 − 1 p 1 ) ∗ ( p 2 k 2 ∗ p 2 − 1 p 2 ) ∗ ( p 3 k 3 ∗ p 3 − 1 p 3 ) . . . = ϕ ( p 1 k 1 ) ∗ ϕ ( p 2 k 2 ) ∗ ϕ ( p 3 k 3 ) . . . (p_1^{k_1} * \frac{ p_1 - 1}{ p_1}) * (p_2^{k_2} * \frac{ p_2 - 1}{ p_2}) * (p_3^{k_3} * \frac{ p_3 - 1}{ p_3}) ... = \phi(p_1^{k_1}) * \phi( p_2^{k_2}) * \phi( p_3^{k_3})... (p1k1p1p11)(p2k2p2p21)(p3k3p3p31)...=ϕ(p1k1)ϕ(p2k2)ϕ(p3k3)...
      … 即: ϕ ( p 1 k 1 ∗ p 2 k 2 ∗ p 3 k 3 . . . ) = ϕ ( p 1 k 1 ) ∗ ϕ ( p 2 k 2 ) ∗ ϕ ( p 3 k 3 ) . . . \phi( p_1^{k_1} * p_2^{k_2} * p_3^{k_3} ...) = \phi(p_1^{k_1}) * \phi( p_2^{k_2}) * \phi( p_3^{k_3})... ϕ(p1k1p2k2p3k3...)=ϕ(p1k1)ϕ(p2k2)ϕ(p3k3)...
      … 而, p 1 k 1 ,    p 2 k 2 ,    p 3 k 3 p_1^{k_1},\ \ p_2^{k_2}, \ \ p_3^{k_3} p1k1,  p2k2,  p3k3这些项, 是互相互质的; 即: ϕ ( n ) , 可以拆分成这些项的乘积 \phi( n), 可以拆分成这些项的乘积 ϕ(n),可以拆分成这些项的乘积
      … 对于 任意的 a ∗ b = n , 且 a , b 互质 任意的a*b = n, 且a,b互质 任意的ab=n,a,b互质(这是积性函数的前提), a一定是某些项的乘积, b剩余项的乘积
      … 因此, 满足: f ( a ∗ b ) = f ( a ) ∗ f ( b ) f(a*b) = f(a) *f(b) f(ab)=f(a)f(b)

    • 任意数 等于 其所有约数的欧拉函数之和. n = ∑ d ∣ n ϕ ( d ) n = \sum_{d | n}^{}{ \phi( d)} n=dnϕ(d)
      比如, n=10, 其约数为: {1, 2, 5, 10}, 其欧拉函数之和为: ϕ ( 1 ) : 1 + ϕ ( 2 ) : 1 + ϕ ( 5 ) : 4 + ϕ ( 10 ) : 4 = 10 \phi( 1):1 + \phi( 2):1 + \phi( 5):4 + \phi( 10):4 = 10 ϕ(1):1+ϕ(2):1+ϕ(5):4+ϕ(10):4=10
      证明:
      N为任意正整数 (在以下证明中, N可以当成是个常数), 证明: N = ∑ d ∣ N ϕ ( d ) N = \sum_{d | N}^{}{ \phi( d)} N=dNϕ(d)
      C ( x ) 为 : ∀ i ∈ [ 1 , N ] , 且满足 : g c d ( i , N ) = x 条件的 , i 的个数 C( x)为: \forall i \in [1, N], 且满足: gcd( i, N) = x条件的, i的个数 C(x):i[1,N],且满足:gcd(i,N)=x条件的,i的个数
      结论一: N = ∑ i = 1 N C ( i ) N = \sum_{i = 1}^{N}{ C( i)} N=i=1NC(i)
      证明: 因为对任意的 i ∈ [ 1 , N ] i \in [1, N] i[1,N] , gcd( i, N)的值 是唯一的; 而且gcd( i, N)的值 都是在[1, N]范围内.
      结论二: N = ∑ i ∣ N C ( i ) N = \sum_{i | N}{ C( i)} N=iNC(i)
      证明: 所有的gcd( i, N)一定都是N的约数.
      … … 比如, N = 10, 则 C ( 1 ) : { 1 , 3 , 7 , 9 } = 4 , C ( 2 ) : { 2 , 4 , 6 , 8 } = 4 , C ( 5 ) : { 5 } = 1 , C ( 10 ) : { 10 } = 1 C(1): \{ 1, 3, 7, 9\} = 4, \quad C( 2): \{ 2, 4, 6, 8\} = 4, \quad C( 5) : \{ 5\} = 1, \quad C( 10) : \{ 10\} = 1 C(1):{1,3,7,9}=4,C(2):{2,4,6,8}=4,C(5):{5}=1,C(10):{10}=1
      … … 其他的 C ( 3 , 4 , 6 , 7 , 8 , 9 ) = 0 C( 3, 4, 6, 7, 8, 9) = 0 C(3,4,6,7,8,9)=0
      结论三: C ( i ) = ϕ ( N / i ) C( i) = \phi( N / i) C(i)=ϕ(N/i)
      证明: 对于 C ( i ) = k , 其集合元素为 { c 1 , c 2 , . . . , c k } C( i) = k, 其集合元素为\{ c1, c2, ..., ck \} C(i)=k,其集合元素为{c1,c2,...,ck}, 均有: gcd( cj, N) = i
      … … 此时, 左右侧同除i, g c d ( c j i , N i ) = 1 gcd( \frac{ cj}{ i}, \frac{N}{i}) = 1 gcd(icj,iN)=1(两者都是可以整除的), 此时集合变成: { c 1 i , c 2 i , . . . , c k i } \{ \frac{ c1}{ i}, \frac{ c2}{ i}, ..., \frac{ ck}{ i} \} {ic1,ic2,...,ick}
      … … 因为 c j ∈ [ 1 , N ] , 所以 : c j i ∈ [ 1 , N i ] cj \in [1, N], 所以: \frac{ cj}{ i} \in [1, \frac{ N}{i}] cj[1,N],所以:icj[1,iN], 因此, 这个 { c 1 i , c 2 i , . . . , c k i } \{ \frac{ c1}{ i}, \frac{ c2}{ i}, ..., \frac{ ck}{ i} \} {ic1,ic2,...,ick}集合个数, 就等于 ϕ ( N / i ) \phi( N/i) ϕ(N/i)
      … … 此时我们得到: N = ∑ i ∣ N ϕ ( N i ) N = \sum_{i | N}{ \phi( \frac{ N}{i}}) N=iNϕ(iN)
      结论四: N = ∑ i ∣ N ϕ ( i ) N = \sum_{i | N}{ \phi( i}) N=iNϕ(i)
      证明: 一个数的所有约数集合, 10: 1, 2, 5, 10, ϕ ( 10 ) + ϕ ( 5 ) + ϕ ( 2 ) + ϕ ( 1 ) = ϕ ( 1 ) + ϕ ( 2 ) + ϕ ( 5 ) + ϕ ( 10 ) \phi( 10) + \phi( 5) + \phi( 2) + \phi( 1) = \phi( 1) + \phi( 2) + \phi( 5) + \phi( 10) ϕ(10)+ϕ(5)+ϕ(2)+ϕ(1)=ϕ(1)+ϕ(2)+ϕ(5)+ϕ(10)
      … … 故, ∑ i ∣ N ϕ ( N i ) = ∑ i ∣ N ϕ ( i ) \sum_{i | N}{ \phi( \frac{ N}{i}}) = \sum_{i | N}{ \phi( i}) iNϕ(iN)=iNϕ(i)

    • N = p k , 其中 p 为质数 N = p^k, 其中p为质数 N=pk,其中p为质数, 则 ϕ ( N ) = N − p k − 1 \phi( N) = N - p^{k-1} ϕ(N)=Npk1
      … (一般常用 ϕ ( p k ) = p k ∗ p − 1 p \phi( p^{k}) = p^{k} * \frac{ p - 1}{ p} ϕ(pk)=pkpp1这个公式)
      对于N, 他和不互质的数, 只有: p , 2 p , 3 p , . . . , k p p, 2p, 3p, ..., kp p,2p,3p,...,kp (注意, 不是p, p^2, p^3, ..., p^k)
      关键是k等于多少呢?
      … 即在一个有N个元素的数组中, 从左到右, 每p个 拿一个数, 总共是多少个呢?
      … 总共有 N p \frac{ N}{ p} pN
      因此, 与N不互质的个数有: N p = p k − 1 \frac{ N}{ p} = p^{k-1} pN=pk1

    • 对任意的 N = p 1 k 1 ∗ p 2 k 2 ∗ p 3 k 3 . . . N = p_1^{k_1} * p_2^{k_2} * p_3^{k_3} ... N=p1k1p2k2p3k3..., 则 ϕ ( N ) = N ∗ p 1 − 1 p 1 ∗ p 2 − 1 p 2 ∗ p 3 − 1 p 3 ∗ . . . \phi( N) = N * \frac{ p_1 - 1}{ p_1} * \frac{ p_2 - 1}{ p_2} * \frac{ p_3 - 1}{ p_3} * ... ϕ(N)=Np1p11p2p21p3p31...
      证明: 因为欧拉函数是积性函数, 我们将其拆分成: p 1 k 1 ,   p 2 k 2 ,   p 3 k 3 , . . . p_1^{k_1}, \ p_2^{k_2}, \ p_3^{k_3}, ... p1k1, p2k2, p3k3,... 这些项
      这些项 他们是互相互质的, 所以, 满足 积性函数的拆分条件.
      ϕ ( N ) = ϕ ( p 1 k 1 ) ∗ ϕ ( p 2 k 2 ) ∗ ϕ ( p 3 k 3 ) ∗ . . . \phi( N) = \phi( p_1^{k_1}) * \phi( p_2^{k_2}) * \phi( p_3^{k_3}) * ... ϕ(N)=ϕ(p1k1)ϕ(p2k2)ϕ(p3k3)...
      根据上条性质, ϕ ( p 1 k 1 ) = p 1 k 1 ∗ p 1 − 1 p 1 \phi( p_1^{k_1}) = p_1^{k_1} * \frac{ p_1 - 1}{ p_1} ϕ(p1k1)=p1k1p1p11, 依次带入即可.

    例题

    • https://blog.csdn.net/weixin_42712593/article/details/126301107
      线性筛 欧拉函数.

    • https://blog.csdn.net/weixin_42712593/article/details/126306323
      线性筛 欧拉函数.

  • 相关阅读:
    【SQL性能优化】锁:悲观锁和乐观锁是什么?(优)
    【产品经理修炼之道】- 政务G端产品建设指南
    Unity模拟薄膜干涉效果
    关于亚马逊云科技云技能学习
    Linux线程互斥
    基数排序.
    Oracle ADG相关介绍
    HTML网页设计作业:文化网站设计——基于HTML古典中国风工艺美术网页设计(9页)
    oracle 数据库实验三
    JavaScript 日期和时间的格式化
  • 原文地址:https://blog.csdn.net/weixin_42712593/article/details/126279207