切换深浅主题
第 5 章:欧拉函数的计数与两个恒等式
本章对象: 数
中与
互素的整数;
的乘积仅遍历不同素因子。
5.1 欧拉函数:数互素整数,也数可逆剩余类
原问题:我是指那个公因子的
对,你指的是前面那个和“公因子/互素”有关的 欧拉函数(Euler totient function),不是欧拉公式。
它记作
定义是:
也就是:从 到
里,有多少个数和
没有大于 1 的公因子。
例如 :
其中与 6 互素的是
所以
为什么会有这样一个函数?本质上是数论里经常需要问:
模
意义下,哪些数有乘法逆元?
答案恰好就是那些满足
的数,所以 其实是在数:
里有多少个元素。
而在你现在学的单位根里,它又自然出现,因为:
是本原 次单位根,当且仅当
所以本原 次单位根的个数就是
更进一步,欧拉函数有一个很重要的计算公式:
其中 遍历
的不同素因子。
比如
所以
因为 中与 12 互素的是:
这个公式其实就是“把所有与 有公共素因子的数删掉”。
例如 。先有 12 个数。
删掉 2 的倍数,占一半:
再删掉剩下那些 3 的倍数,相当于再乘:
于是:
所以
本质上来自“排除所有与 共享素因子的数”。
你现在先记住最核心的两层就够了:
而在分圆域里:
所以最终才得到
下一步我可以专门一步一步证明为什么
而不是只给这个公式。
5.2 用容斥原理证明欧拉函数的乘积公式
我们就把这个公式从最直观的“删掉有公共素因子的数”一步一步推出来:
其中 表示
遍历
的所有不同素因子。
先看一个具体例子,。
要找和 12 互素的数,就是在
中,排除所有和 12 有公共素因子的数。
因为 12 的素因子只有 2 和 3,所以只需要排除:
以及
一开始有 12 个数。
2 的倍数有:
共
个。
所以删掉它们以后剩:
但现在还要删掉 3 的倍数。
不能直接再减 ,因为 6 和 12 已经因为是 2 的倍数被删过一次了。
这就是为什么需要“容斥原理”。
3 的倍数有
个:
而同时是 2 和 3 的倍数,也就是 6 的倍数,有:
个。
所以最终:
算一下:
整理:
注意括号里正好能因式分解:
所以:
现在推广到一般情况。
假设:
是 的素因数分解。
一个数 和
互素,当且仅当:
不被任何一个
整除。
所以我们从 这
个数里,删掉所有
的倍数。
被 整除的数有:
个。
被 同时整除的数有:
个。
被三个不同素数同时整除的数有:
个。
于是容斥原理给:
把 提出来:
而括号里恰好就是乘积展开:
所以:
这就是公式的来源。
这里还有一个你很值得注意的点:
因为判断
时,只关心 是否被某个素因子
整除。
比如:
一个 只要能被 2 整除,就已经和
不互素了;不需要继续区分它是否能被
整除。
所以乘积只遍历“不同素因子”。
例如:
虽然:
但只出现一次素数 2。
同样:
与 18 互素的数正好是:
现在把它重新接回你正在学的分圆域:
所以例如:
也就是说,欧拉函数不仅是在数“互素整数”,同时直接告诉你第 个分圆域相对于
的扩张次数。
5.3 为什么最大公因数一定整除 n
原问题:为什么整除
因为这里的 被定义成
而“最大公因数”首先得是一个公因数,所以它一定同时整除 和
。
也就是说:
并且
例如如果
那么 4 当然整除 8,也整除 12。
所以当我们把 按照
分类时, 不可能随便取,而只能取
的约数。
比如 ,那么可能的
只能是
不可能有
因为 5 根本不整除 12。
所以前面写
不是额外假设,而是从
自动得到的。
5.4 欧拉函数的约数和:单位根计数证明
原问题:为什么这个成立
这个恒等式
本质上是因为:把 这
个整数按它们和
的最大公因数分类,每一类的数量恰好是某个
。
先看最直观的单位根版本,因为和你现在学的内容最贴近。
一共有
个不同的复根。每一个根都有一个阶,而且这个阶一定整除
。
所以这 个根可以按“阶”分组:
而阶恰好为 的单位根有多少个?
就是:
因为本原 次单位根一共有
个。
于是所有根的总数就是:
但另一方面, 本来就有
个不同的根。
所以:
举个例子,。
6 的约数是:
各阶单位根的数量分别是:
加起来:
这正好就是 的 6 个根。
所以这个公式其实是在说:
其中 遍历
的所有约数。
如果你愿意,我下一步可以继续给你讲这个恒等式的纯整数证明,不借助单位根。
5.5 欧拉函数的约数和:纯整数分类证明
我们不用单位根,只用整数和最大公因数来证明
核心思路是:把
这 个整数按它们和
的最大公因数分类。
先看一个具体例子,取
把 按
来分组。
可能出现的最大公因数一定是 12 的约数:
例如:
的有
共
个。
再看
这些 可以写成
条件变成
把 2 提出来:
所以 必须在
中与 6 互素。
这样的 有
个。
所以满足
的 也有
个。
一般来说,如果
其中
那么可以写
又因为
所以
等价于
提出 :
于是
所以这样的 有
个。
因此,满足
的整数 有
个。
现在把所有可能的 加起来,因为每个
都会且只会属于其中一类:
最后注意,当 遍历
的所有约数时,
也恰好遍历 的所有约数。
所以把变量换个名字,就得到
这就是纯整数证明。
你可以把它记成一句话:
每一类的大小就是某个欧拉函数值,所以总数相加必然等于 。
而你前面学的单位根证明,其实和这个证明结构非常像:一个是按“最大公因数”分类,一个是按“阶”分类。