夜深人静写算法(三十一)- 欧拉函数
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 p−1 。记为:
- ϕ ( p ) = p − 1 \\phi(p) = p-1 ϕ(p)=p−1
- 素数 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,...,pk−1∗p
- 于是,肉眼就可以看出,和 n = p k n = p^k n=pk 不互素的数总共有 p k − 1 p^{k-1} pk−1 个,把这些数去掉就是互素的数了,这种情况下,欧拉函数表示如下:
- ϕ ( p k ) = p k − p k − 1 \\phi(p^k) = p^k-p^{k-1} ϕ(pk)=pk−pk−1
- 素数幂 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,b≥1,用 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)=pa−1qb
- m ( n , q ) = p a q b − 1 m(n, q) = p^aq^{b-1} m(n,q)=paqb−1
- 并且我们发现 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)=pa−1qb−1
- 由于在小于等于 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))=n−m(n,p)−m(n,q)+m(n,pq)=papb−pa−1qb−paqb−1+pa−1qb−1《夜深人静写算法》数论篇 - (15) 欧拉定理