欧拉函数及其性质

版权声明:欢迎复制!!! https://blog.csdn.net/qq_37493070/article/details/81988725
定义

在数论,对正整数n,欧拉函数是小于或等于n的正整数中与n互质的数的数目(φ(1)=1)。此函数以其首名研究者欧拉命名(Euler’s totient function),它又称为Euler’s totient function、φ函数、欧拉商数等。

函数式

φ ( x ) = x i = 1 n ( 1 1 p i )

其中 p i x 的质因数 ( x > 0 )
φ ( x ) 1 x 与x互质数的个数

性质
1. 对于任意一个质数 p , φ ( n ) = n 1

因为 n 为质数,与他互质的个数就是 n-1

2. 当 g c d ( n , m ) = 1 时, φ ( n m ) = φ ( n ) φ ( m )

因为 φ ( n ) 是积性函数。 积性函数指对于所有互质的整数a和b有性质f(ab)=f(a)f(b)的数论函数。

3. 若 n = p k 其中p为质数,则 φ ( n ) = p k p k 1 = ( p 1 ) p k 1

1 n 中除了p的倍数,都与 p k 互质, 1 n p 倍数的个数为 p k ÷ p = p k 1

4. n = p 1 k 1 p 2 k 2 p m 1 k m 1 p m k m 其中 p m k m n 所分解的质因数( k m 为每个质因数的个数) ,则
φ ( n ) = n i = 1 m ( 1 1 p i )

由性质3可得

φ ( n ) = i = 1 n ( p i 1 ) p i k i 1 ( p i | n ) = ( p 1 k 1 p 2 k 2 p 3 k 3 p m k m ) i = 1 m ( 1 1 p i ) = n i = 1 m ( 1 1 p i )

5. 所有小于 n n 互质个数的和 s u m = n × φ ( n ) 2

首先证明 g c d ( n , i ) = 1 ,则 g c d ( n , n i ) = 1
利用反证法:
设存在 g c d ( n , i ) = 1 , g c d ( n , n i ) = k ,那么可得 ( n i ) % k = 0 , n % k = 0 ,所以 i % k = 0 ,即 g c d ( n , i ) = k
与假设矛盾,所以 g c d ( n , i ) = 1 ,则 g c d ( n , n i ) = 1 成立
由这个式子可得每个与 n 互质的数都是成对的,因为 g c d ( n , i ) = g c d ( n , n i ) = 1 , i ( n i ) 成对,这样就可证明5性质

6. 如果 i mod p =0,其中 p 为质数,则 φ ( i p ) = p φ ( i ) ,否则 φ ( i p ) = ( p 1 ) φ ( i )

对于前半部分,我们只需证明 如果 g c d ( i , n ) = 1 g c d ( i , n + i ) = 1
同上反证法:
g c d ( i , n ) = 1 , g c d ( i , n + i ) = k
n + i = k a 1 , i = k a 2 ,则 k a 2 + n = k a 1 , n = ( a 1 a 2 ) k ,所以 g c d ( i , n ) >= k ,与假设矛盾, g c d ( i , n ) = 1 ,则 g c d ( i , n + i ) = 1 成立

有了上面那个式子就好证明了,因为 p为质数,所以与 i p 互质的数也就是 1 ( i p ) i 互质的数的个数,这样就可以用上面那个定理了,设 n 是小于 i 且与 i 互质的数,则 g c d ( i , n ) = 1 g c d ( i , n + i ) = g c d ( i , n + 2 i ) = g c d ( i , n + 3 i ) = = g c d ( i , n + ( p 1 ) i ) 也就是原来的 p

后半部分更好证明, i p 互质,那就是性质2

7. n = d | n φ ( d ) ( d | n ) 指n是d的倍数

正规的推导看不懂,在搜了很多博客后看到了一种简单的证明方法

1 n , 2 n , 3 n , 4 n , , n n

一共n个分数,把所有数化简到最简分数,则每个分母都是n的因子,也就是说n 是所有分母的倍数,每个分母存在的数量就是 φ ( i ) 所有 φ ( i ) 的和也就是所有数的个数 n

8. 欧拉定理:对于互质的整数a,m,有 a φ ( m ) 1 (mod m)。

证明
设小于 n 且与 n 互质的集合 Z , 则 | Z | = φ ( n ) Z = { q 1 , q 2 , q 3 q m }
设集合 Y = { a p 1   m o d   m , a p 2   m o d   m   a p φ ( m }

我们只需证明 Y = Z 即可
因为 a n 互质, p i n 互质,所以 a p i n 互质,所以 a p i   m o d   n Z
i   ! =   j 那么 a p i   m o d   n   ! =   a p j   m o d   n
一如既往的反证法:
a p i   m o d   n   =   a p j   m o d   n , a p i = k i n + b ,那么

a p i a p j = k i n + b k j n b a ( p i p j ) = n ( k i k j )   n = p i p j k i k j a
,这与 a   n 互质矛盾,所以 i   ! =   j 那么 a p i   m o d   n   ! =   a p j   m o d   n 成立
因此我们可得 Z = Y
所以我们可以列出
a p 1 a p 2 a p φ ( n ) p 1 p 2 p φ ( n ) (   m o d   n ) a φ ( n ) 1   (   m o d   n )

费马小定理就是他的一种情况 a p 互质时 a p 1 1   (   m o d   p ) ,这时候 φ ( p ) = p 1 带进去这个性质便可得

欧拉函数求法
应用
欧拉筛质数

板子 线性筛法中的p[]就是

欧拉降幂

公式
A k A k % φ ( m ) ( m o d   m ) g c d ( A , m ) = 1
A k A k ( m o d   m ) g c d ( A , m ) ! = 1 , k < φ ( m )
A k A k % φ ( m ) + φ ( m ) ( m o d   m ) g c d ( A , m ) ! = 1 , k > φ ( m )
证明见:https://blog.csdn.net/weixin_38686780/article/details/81272848
看不懂,只好背公式,数学还是太垃圾了


板子
O ( n ) ,线性筛法

int p[maxn];
bool  vis[maxn];
ll phi[maxn];
int cnt=0;
ll get_phi(int len=maxn){
    phi[1]=1;
    for(int i=2;i<len;i++){
        if(!vis[i]){
            p[cnt++]=i;
            phi[i]=i-1;
        }       
        for(int j=0;j<cnt;j++){
            if(p[j]*i>=len) break;
            vis[p[j]*i]=1;
            if(i%p[j]==0){
                phi[i*p[j]]=p[j]*phi[i];
                break;  
            }
            phi[i*p[j]]=phi[i]*(p[j]-1);

        }
    }

}

O ( n ) ,适合求单点

ll get_phi(ll  x){
    ll res=x;
    for(int i=2;i*i<=x;i++)
    {
        if(x%i==0){
            res=res-res/i;
            while(x%i==0) x/=i;
        }       
    }
    if(x!=1) res=res-res/x;
    return res;
}

练习

BZOJ 3884 上帝与集合的正确用法 ( O ( n ) 板子) 题解

猜你喜欢

转载自blog.csdn.net/qq_37493070/article/details/81988725