夜深人静写算法(三十一)- 欧拉函数

Posted 英雄哪里出来

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了夜深人静写算法(三十一)- 欧拉函数相关的知识,希望对你有一定的参考价值。

一、前言

  数论的内容会比较干,所以看之前务必多喝几杯水!在阅读本文之前,如果对整除、互素、同余、算术基本定理、素数筛选、因子分解、辗转相除、扩展欧几里得 等概念不是很清楚,建议先阅读 夜深人静写算法(三)- 初等数论入门
  欧拉函数是初等数论中一个比较重要的概念,并且鼎鼎大名的 RSA 加密算法也用到了欧拉函数的性质。建议着重关注一些重要公式的推导过程,因为接下来我会持续写有关于数论的内容,如果中间有一节没有仔细看,可能就一路 gg 了, g o o d   l u c k good \\ luck good luck在这里插入图片描述

二、欧拉函数

1、欧拉函数定义

【定义1】对于正整数 n n n,欧拉函数是小于等于 n n n 的正整数中与 n n n 互素的数的个数,记为 ϕ ( n ) \\phi(n) ϕ(n)(其中 ϕ ( 1 ) = 1 \\phi(1) = 1 ϕ(1)=1)。

1)素数

  • 对于素数 p p p 而言,小于等于 p p p 的数必然与它互素,所以互素的数的个数为 p − 1 p-1 p1 。记为:
  • ϕ ( p ) = p − 1 \\phi(p) = p-1 ϕ(p)=p1
  • 素数 7 的欧拉函数如图二-1-1所示:
    图二-1-1
  • 需要注意的是,欧拉函数是个值,不是一个集合。

2)素数的幂

  • 当一个数 n n n 等于素数 p p p k k k 次幂时(即 n = p k n = p^k n=pk),任何小于等于 n n n 且是 p p p 的倍数的数都与 n n n 有大于 1 1 1 的最大公约数,那么剩下的就是和 n n n 互素的数。有多少个 p p p 的倍数是小于等于 n n n 的呢?我们可以一个一个列出来:
  • p , 2 p , 3 p , . . . , p k − 1 ∗ p p,2p,3p,...,p^{k-1}*p p,2p,3p,...,pk1p
  • 于是,肉眼就可以看出,和 n = p k n = p^k n=pk 不互素的数总共有 p k − 1 p^{k-1} pk1 个,把这些数去掉就是互素的数了,这种情况下,欧拉函数表示如下:
  • ϕ ( p k ) = p k − p k − 1 \\phi(p^k) = p^k-p^{k-1} ϕ(pk)=pkpk1
  • 素数幂 4 的欧拉函数如图二-1-2所示:
    图二-1-2

3)互素数的乘积

  • 对于两个互素的数的乘积,必然可以表示成如下形式:
  • n = p a q b n = p^aq^b n=paqb
  • 其中 p p p q q q 为两个不同的素数,并且满足 a , b ≥ 1 a,b \\ge 1 a,b1,用 m ( n , p ) m(n, p) m(n,p) 来代表小于等于 n n n 的数中 p p p 的倍数的个数。则有:
  • m ( n , p ) = p a − 1 q b m(n, p) = p^{a-1}q^b m(n,p)=pa1qb
  • m ( n , q ) = p a q b − 1 m(n, q) = p^aq^{b-1} m(n,q)=paqb1
  • 并且我们发现 m ( n , p ) m(n, p) m(n,p) m ( n , q ) m(n, q) m(n,q) 存在重叠的部分(既是 p p p 的倍数,又是 q q q 的倍数),即:
  • m ( n , p q ) = p a − 1 q b − 1 m(n, pq) = p^{a-1}q^{b-1} m(n,pq)=pa1qb1
  • 由于在小于等于 n n n 的数中,只有四种数:
  • 1) p p p 的倍数但非 q q q 的倍数;
  • 2) q q q 的倍数但非 p p p 的倍数;
  • 3) p q pq pq 的公倍数;
  • 4)和 p q pq pq 互素的数(肯定也是和 p a q b p^aq^b paqb 互素的,所以这部分就是 ϕ ( n ) \\phi(n) ϕ(n));
  • 如图二-1-3所示,两个小圆分别代表 p p p q q q 的倍数,两圆相交的部分就是 p q pq pq 的公倍数,剩下的就是和 p q pq pq 互素的数了。这里用到了容斥原理,关于这个内容,后面还会开章节来具体讲述。
  • 图二-1-3
  • 所以有如下等式成立:
  • n = m ( n , p ) + m ( n , q ) − m ( n , p q ) + ϕ ( n ) n = m(n, p) + m(n, q) - m(n, pq) + \\phi(n) n=m(n,p)+m(n,q)m(n,pq)+ϕ(n)
  • 移项后得到:
  • ϕ ( n ) = n − ( m ( n , p ) + m ( n , q ) − m ( n , p q ) ) = n − m ( n , p ) − m ( n , q ) + m ( n , p q ) = p a p b − p a − 1 q b − p a q b − 1 + p a − 1 q b − 1 = ( p a − p a − 1 ) ( q b − q b − 1 ) = ϕ ( p a ) ϕ ( q b ) \\begin{aligned}\\phi(n) &= n - (m(n, p) + m(n, q) - m(n, pq)) \\\\ &= n - m(n, p) - m(n, q) + m(n, pq) \\\\ &= p^ap^b - p^{a-1}q^b - p^aq^{b-1} + p^{a-1}q^{b-1} \\\\ &= (p^a-p^{a-1})(q^b-q^{b-1}) \\\\ &= \\phi(p^a)\\phi(q^b)\\end{aligned} ϕ(n)=n(m(n,p)+m(n,q)m(n,pq))=nm(n,p)m(n,q)+m(n,pq)=papbpa1qbpaqb1+pa1qb1《夜深人静写算法》数论篇 - (15) 欧拉定理

    夜深人静写算法(三十二)- 费马小定理

    《夜深人静写算法》数论篇 - (17) 扩展欧拉定理

    夜深人静写算法(三十七)- 威尔逊定理

    《夜深人静写算法》数论篇 - (19) RSA

    《夜深人静写算法》数论篇 - (16) 费马小定理