附录10 - 欧拉函数
一、定义
『欧拉函数 φ(n)』:正整数 n 的欧拉函数 φ(n) 定义为,1⋯n 中和 n 互素的整数的个数。
二、欧拉函数的积性
欧拉函数有一个很好的性质
如果两个正整数 m 和 n 互素(gcd(m,n)=1),那么它们乘积的欧拉函数,等于它们各自欧拉函数的乘积:
φ(m⋅n)=φ(m)φ(n)
证明积性(方法一)
为了严谨证明,我们把 1 到 m⋅n 这 mn 个数排成一个 n 行 m 列的矩阵:
1m+12m+1⋮(n−1)m+12m+22m+2⋮(n−1)m+2………⋱…km+k2m+k⋮(n−1)m+k………⋱…m2m3m⋮nm我们要在这个矩阵里找:有多少个数同时与 m 和 n 互素?(因为与 mn 互素,等价于既与 m 互素,又与 n 互素)。
-
纵向看(筛选与 m 互素的数):
观察第 k 列的数,它们的统一形式是 j⋅m+k(其中 j 是行号减一)。
根据带余除法和求最大公约数的性质(辗转相除法):
gcd(j⋅m+k,m)=gcd(k,m)
这意味着:同一列的数,与 m 的最大公约数全都是一样的,完全由表头的 k 决定。所以,如果 k 与 m 互素,这一整列的数都与 m 互素;如果 k 与 m 不互素,这一整列全都报废。因为表头是从 1 到 m,其中与 m 互素的数有 φ(m) 个。所以,只有 φ(m) 列幸存下来。
-
纵列内看(筛选与 n 互素的数):
现在我们随便挑出幸存的某一列(假设是第 k 列)。这一列的数是:
k,m+k,2m+k,…,(n−1)m+k
这里有一个极其重要的数论事实:因为 gcd(m,n)=1,这 n 个数除以 n 的余数,恰好是
0,1,2,…,n−1 的一个完整排列(只是顺序打乱了)。
(严谨证明:假设有两个数同余,即 j1m+k≡j2m+k(modn),则 (j1−j2)m 能被 n 整除。因为 m 和 n 互素,所以 n 必须整除 (j1−j2)。但 j1 和 j2 都小于 n,所以它们只能相等。这证明了没有两个数余数相同,必定覆盖所有余数。)
既然这一列数除以 n 的余数构成了 0 到 n−1 的完整排列,那么根据欧拉函数的定义,这一列中恰好有 φ(n) 个数与 n 互素。
-
总结:
我们有 φ(m) 个合格的列,每一列里又有 φ(n) 个合格的数。所以,总共既与 m 互素又与 n 互素的数字个数为:φ(m⋅n)=φ(m)φ(n)
证明积性(方法二)
核心思路:构造集合的双射
我们要证明,当 gcd(m,n)=1 时,φ(m⋅n)=φ(m)φ(n)。
这在代数上等价于证明:与 mn 互素的数的集合,和“与 m 互素的数的集合”及“与 n 互素的数的集合”的笛卡尔积,元素个数完全相等。
我们定义三个集合:
Umn:1 到 mn 中与 mn 互素的整数集合(其元素个数为 φ(mn))。
Um:1 到 m 中与 m 互素的整数集合(其元素个数为 φ(m))。
Un:1 到 n 中与 n 互素的整数集合(其元素个数为 φ(n))。
我们的目标是构造一个从 Umn 到 Um×Un 的映射 f,并证明它是双射。
第一步:定义映射(从整体到局部)
对于任意 x∈Umn,我们定义映射 f 为分别对 m 和 n 取模:
f(x)=(xmodm,xmodn)
这个映射合法吗?因为 x 与 mn 互素,所以 x 必然既与 m 互素,又与 n 互素。根据欧几里得引理的除法性质,gcd(xmodm,m)=gcd(x,m)=1。因此,xmodm∈Um 且 xmodn∈Un。映射 f 确实把 Umn 里的元素准确地送到了 Um×Un 中。
第二步:利用裴蜀定理证明双射(从局部回推整体)
要证明它是双射,我们只需证明:对于任意给定的数对 (a,b)∈Um×Un,在 Umn 中都存在且仅存在一个 x,使得 x≡a(modm) 且 x≡b(modn)。
这时候裴蜀定理闪亮登场!因为 gcd(m,n)=1,根据裴蜀定理,必然存在整数 u 和 v,使得:
mu+nv=1
我们直接用 u 和 v 像拼积木一样“拼”出这个目标 x。令:
x=(a⋅nv+b⋅mu)modmn
-
验证 x 满足条件:
模 m 看:因为 nv=1−mu,所以 x≡a(1−mu)+0≡a(modm)。
模 n 看:因为 mu=1−nv,所以 x≡0+b(1−nv)≡b(modn)。
这证明了 x 的存在性。
-
验证 x 确实在 Umn 中(即 x 与 mn 互素):
假设有素数 p 同时整除 x 和 mn。因为 m 和 n 互素,p 只能整除 m 或 n 中的一个。不妨设 p∣m。
既然 p∣m,而 x≡a(modm),这就意味着 (x−a) 是 m 的倍数,于是 p∣(x−a),再加上 p∣x,所以 p 也必定整除 a。但这不可能!因为 a∈Um,它与 m 是互素的,不可能有 p 这个公因子。产生矛盾,说明 x 必然与 mn 互素,x∈Umn。
-
验证唯一性:
如果在 1 到 mn 之间还有另一个数 y 也满足 y≡a(modm) 且 y≡b(modn)。那么 x−y 既能被 m 整除,也能被 n 整除。因为 m 和 n 互素,所以 x−y 必须能被 mn 整除。但在 1 到 mn 的范围内,两个不同的数之差的绝对值必定小于 mn,所以它们只能相等(x=y)。
结论:通过裴蜀定理,我们完美证明了 Umn 和 Um×Un 之间存在严密的一一对应关系(双射)。既然两个集合可以完美配对,它们的元素个数就必然完全相等。因此:
φ(mn)=φ(m)⋅φ(n)
- 注:上面证明中的第二步里,构造 x=(a⋅nv+b⋅mu)modmn 的方法,实际是借用了「中国剩余定理」中的构造方式,具体可以参考「附录11」。
三、欧拉函数的因数和性质
『欧拉函数的因数和性质』:对于任意正整数 n,有 ∑d∣nφ(d)=n。(即 n 的所有因数的欧拉函数之和等于 n)
证明:
写出 n 个分数:n1,n2,…,nn。
将它们全部分解为最简分数。约分后,分母 d 必定是 n 的某个因数,且分子 k 与 d 互素。
对于每一个固定的因数 d,以 d 为分母的最简分数有几个?显然,分子 k 必须满足 1≤k≤d 且 gcd(k,d)=1,这样的 k 恰好有 φ(d) 个。
因为所有最简分数加起来总共还是最初的 n 个分数,所以所有 φ(d) 的总和等于 n。证明完毕。
四、欧拉函数的展开
借助于欧拉函数的积性,我们可以将 φ(n) 展开为更具体的表达式:
根据算术基本定理,任何正整数 n 都可以唯一分解为素数幂的乘积。我们设:
n=p1a1p2a2…pmam
那么欧拉函数可以展开为:
φ(n)=p1a1−1(p1−1)p2a2−1(p2−1)…pmam−1(pm−1)
证明展开公式:
第一步:计算单一素数幂的欧拉函数 φ(pa)
我们先不看复杂的 n,只看 n 是一个素数的幂次的情况,即 n=pa(p 为素数,a≥1)。
欧拉函数 φ(pa) 的定义是:在 1 到 pa 的正整数中,有多少个数与 pa 互素?
正难则反,我们可以用排除法:
- 1 到 pa 之间总共有 pa 个数。
- 因为 p 是素数,一个数如果与 pa 不互素,那么它必定含有因子 p,也就是说,它必定是 p 的倍数。
- 在 1 到 pa 中,p 的倍数有哪些呢?
有:1⋅p,2⋅p,3⋅p,…,(pa−1)⋅p。
很显然,这样的数总共有 pa−1 个。我们把这些“不互素”的数从总数里踢出去,剩下的就是互素的数:
φ(pa)=pa−pa−1=pa−1(p−1)
这也就是展开公式里那些 piai−1(pi−1) 碎片的来源。
第二步:拼装最终公式
有了第一步(素数幂的求法)和欧拉函数的积性公式 φ(mn)=φ(m)⋅φ(n),就可以得到最终的展开式了。
把任意正整数 n 分解为不同素数幂的乘积:
n=p1a1p2a2…pmam
因为底数是不同的素数,所以这些素数幂之间两两互素(即 gcd(piai,pjaj)=1)。我们连续使用“积性”公式拆开它们:
φ(n)=φ(p1a1)⋅φ(p2a2)…φ(pmam)
最后,把第一步得到的单一素数幂公式 φ(pa)=pa−1(p−1) 代入上面每一个括号里,就得到了最终的展开公式:
φ(n)=p1a1−1(p1−1)p2a2−1(p2−1)…pmam−1(pm−1)