![应用密码学:原理、分析与Python实现](https://wfqqreader-1252317822.image.myqcloud.com/cover/378/52717378/b_52717378.jpg)
上QQ阅读APP看书,第一时间看更新
2.5 欧拉函数
欧拉函数是数论中最重要也是最基础的一个函数[9] 。它以著名的数学家莱昂哈德・保罗・欧拉(Leonhard Paul Euler)的名字命名,以表彰他在数论领域做出的贡献。欧拉函数也称欧拉总计函数(Euler’s Totient Function) 或欧拉Phi 函数(Euler’s Phi Function)。欧拉函数的定义如下。
定义2.5.1 欧拉函数(Euler’s Function)
欧拉函数是计算在封闭区间
内与
没有公因数的整数的个数。或者说是计算
内的正整数中与
互素的数目。也就是说:
![](https://epubservercos.yuewen.com/3B24BD/31309821707952606/epubprivate/OEBPS/Images/tx02152.jpg?sign=1739471984-ki40ZUYKHD5oBolIywKTi7iufsfLbtsJ-0-9a5345e1a7017260d38cdad13af97b1b)
注:部分参考书籍也常使用表示欧拉函数,
是
的另一种书写形式。由于
还常常表示角度,因此本书采用
表示欧拉函数。
如果是一个合数,则
有一个因子
,满足
,在
中至少有两个整数不与
互素。那么
。当
时,
。因此如果
是一个素数,那么:
![](https://epubservercos.yuewen.com/3B24BD/31309821707952606/epubprivate/OEBPS/Images/tx02216.jpg?sign=1739471984-VrDSTCvL8jYmsUaDBGchujXvl4VTn4ZL-0-3f89a97e919752387098069676513203)
反过来也成立:如果,且
,那么
是一个素数。
如果且
是一个素数,那么还可以推出:
![](https://epubservercos.yuewen.com/3B24BD/31309821707952606/epubprivate/OEBPS/Images/tx02251.jpg?sign=1739471984-bEKPsrw0Vo2ggQkd0qWdLMX89QV6hZ1D-0-28a787802873a4b44d5ce1d004eb11f4)
定理2.5.1 欧拉函数的幂分解(Prime Factorization)
如果是一个正整数,则可以被质因数分解成:
![](https://epubservercos.yuewen.com/3B24BD/31309821707952606/epubprivate/OEBPS/Images/tx02257.jpg?sign=1739471984-1I8kM7Fdo8ryBIUT3b0yaQCFqX13F3vt-0-f9265509157665857b9a1bfb546699ac)
欧拉函数进一步表示为:
![](https://epubservercos.yuewen.com/3B24BD/31309821707952606/epubprivate/OEBPS/Images/tx02263.jpg?sign=1739471984-AuOACeqsPLD5P7VAU47DoMpGcak4En6e-0-237202b7528c681b47e7b5c016604086)
例2.5.1 计算。
解:根据算术基本定理,每个大于1的正整数都可以被唯一地写成素数的乘积,在乘积中的素因子按照非降序排列。因此360可以写成:
![](https://epubservercos.yuewen.com/3B24BD/31309821707952606/epubprivate/OEBPS/Images/tx02271.jpg?sign=1739471984-OMTdLIqF328PMJsNdBI1mafg8MswKRfM-0-bf704b28bbed747a4b32d3d88e11cd64)
代入式中:
![](https://epubservercos.yuewen.com/3B24BD/31309821707952606/epubprivate/OEBPS/Images/tx02281.jpg?sign=1739471984-9dIc2QKxxgmemnTqISfr7KaWpkpCFFDG-0-af0a324a393c54c306a4ceb587676576)
计算欧拉函数的Python代码如下:
1 #计算欧拉函数值 2 def gcd(a, b): 3 if(b == 0): 4 return abs(a) 5 else: 6 return gcd(b, a % b) 7 8 def is_coprime(a, b): 9 return gcd(a, b) == 1 10 11 def phi(x): 12 if x == 1: 13 return 1 14 else: 15 n = [y for y in range(1,x) if is_coprime(x,y)] 16 return len(n) 17 print(phi(360))
例2.5.2 根据欧拉函数计算可得前15个欧拉函数值,如表2-4所示。
表2-4 前15个欧拉函数值
![图片表格](https://epubservercos.yuewen.com/3B24BD/31309821707952606/epubprivate/OEBPS/Images/table_52c9a7c6-c71d-4fad-8543-09ff9403f696.png?sign=1739471984-5OIEntmd7yOyZpfLLSQyufy8sG0TQs9x-0-49d48250d0637140a40281829b984f90)
定理2.5.2 欧拉函数的积性性质(Multiplicative)
如果为正整数,使得
,则:
![](https://epubservercos.yuewen.com/3B24BD/31309821707952606/epubprivate/OEBPS/Images/tx02340.jpg?sign=1739471984-rxqE1HzDpdKsLE4vpvhmLcgJVJrtxJp5-0-75da3a4e088bf6dae12f604d8d0e0087)
证明
假设两个数互素,则意味着
与
没有相同的质因子。设
有
个质因子,
有
个质因子,则:
![](https://epubservercos.yuewen.com/3B24BD/31309821707952606/epubprivate/OEBPS/Images/tx02381.jpg?sign=1739471984-sBnlRopfAH7ztkk8n8GJYF6QxSzWgRE0-0-bbe628f64e5b51be541f58fd11f62f1f)
假设一个整数由素数
进行乘积运算得来,那么很容易可以得到:
![](https://epubservercos.yuewen.com/3B24BD/31309821707952606/epubprivate/OEBPS/Images/tx02398.jpg?sign=1739471984-Lg7JyCmAdZ9UUxxlvNW24C84b4Wn2DZC-0-6046e1526b8cf8cde6e8a704e1d2ea0e)
例2.5.3 计算。
解:
![](https://epubservercos.yuewen.com/3B24BD/31309821707952606/epubprivate/OEBPS/Images/tx02410.jpg?sign=1739471984-Yd3A649EkIvuX6a24T9CiBIlQbzuJd34-0-c2f00abccfc3a9659981af04d4c44dc1)