一个交互式的数论学习平台
欧拉函数 φ(n),也称为欧拉总计函数,计算的是小于或等于 n 的正整数中与 n 互质两个正整数 a 和 b 互质(或称互素),意味着它们的最大公约数 gcd(a, b) = 1。 的数的个数。
列出从 1 到 12 的所有正整数。与 12 互质的数将被 高亮 显示:
欧拉函数有一个基于 质因数分解将一个正整数 n 分解成若干个质数的乘积,例如 12 = 2² × 3¹。 的计算公式:
φ(n) = n × ∏p|n (1 - 1/p)
其中 p 是 n 的所有 不同即使一个质因子出现多次(如 12 中的 2),在公式的连乘积 ∏ 中也只计算一次 (1 - 1/p)。 质因数。
欧拉定理是一个非常重要的数论定理,它描述了模运算下的幂次规律。定理内容如下:
若 a 与 n 互质 (gcd(a, n) = 1),则 aφ(n) ≡ 1 (mod n)
下面我们通过一个“数字圈”的动画来直观感受这个定理是如何产生的。
点击“开始动画演示”按钮,观察数字的变化。
我们会将所有与 9 互质的数(构成集合 S)排列在一个圆上。
然后,将圈上的每个数 x 都乘以 a = 2,并取模 n = 9,即计算 a·x mod n。
观察这些新的数 (a·x mod n) 是否仍然是 S 中的数,并且它们是否只是 S 中元素的一个 重新排列这意味着集合 {a·x mod n | x ∈ S} 与集合 S 本身包含完全相同的元素,只是顺序可能不同。没有元素丢失,也没有新的元素加入。。
现在我们来实际验证一下欧拉定理 aφ(n) ≡ 1 (mod n)。请输入互质的 a 和 n,我们将展示计算过程。
这是一个常见的误解。公式 φ(n) = n - 1 仅当 n 是质数时 成立。
因为质数 p 的定义就是只有 1 和 p 两个正因数,所以在 1 到 p-1 之间的所有整数都与 p 互质。
欧拉定理 aφ(n) ≡ 1 (mod n) 成立的重要前提是:a 与 n 必须互质,即 gcd(a, n) = 1。
如果 a 与 n 不互质,定理就不一定成立了。
例如:a = 2, n = 4。gcd(2, 4) = 2 ≠ 1。欧拉函数 φ(4) = 2 (与4互质的数是1, 3)。
我们计算 aφ(n) mod n = 2φ(4) mod 4 = 22 mod 4 = 4 mod 4 = 0。
结果是 0,而不是 1。这说明当 a 和 n 不互质时,不能直接套用欧拉定理。
(注:对于不互质的情况,有欧拉定理的扩展形式,有时也称为费马-欧拉定理或欧拉降幂,例如当 b ≥ φ(n) 时,ab ≡ ab mod φ(n) + φ(n) (mod n),但这超出了基础欧拉定理的范围。)
欧拉函数有一些方便计算的性质,特别是对于质数的幂和两个不同质数的乘积:
φ(pk) = pk - pk-1 = pk-1(p - 1) = pk (1 - 1/p)
例如:φ(8) = φ(23) = 23 - 22 = 8 - 4 = 4。 (与8互质的是1, 3, 5, 7)φ(pq) = φ(p) × φ(q) = (p - 1) × (q - 1)
例如:φ(15) = φ(3 × 5) = φ(3) × φ(5) = (3 - 1) × (5 - 1) = 2 × 4 = 8。 (与15互质的是1, 2, 4, 7, 8, 11, 13, 14)利用这些性质,结合欧拉函数的积性,我们可以计算任意正整数 n 的欧拉函数值。首先将 n 进行质因数分解 n = p1k1 p2k2 ... prkr,然后:
φ(n) = φ(p1k1) × φ(p2k2) × ... × φ(prkr)
这与之前提到的公式 φ(n) = n × ∏(1 - 1/p) 是等价的。
例如:φ(36) = φ(22 × 32) = φ(22) × φ(32) = (22 - 21) × (32 - 31) = (4 - 2) × (9 - 3) = 2 × 6 = 12。
下面的图表展示了 n 从 1 到 50 时,欧拉函数 φ(n) 的值。观察值的变化趋势:
观察图表,你可能会发现:
提示:图表将在您展开此部分时生成。
欧拉函数和欧拉定理是现代密码学基石之一——RSA 公钥加密算法 的核心数学原理。
RSA 的安全性很大程度上依赖于大整数质因数分解的困难性,以及计算欧拉函数 φ(n) 的困难性(如果不知道 n 的质因数分解)。
RSA 密钥生成过程简述:
公钥: (n, e) 私钥: (n, d)
加密: (使用公钥) 假设明文是 M (一个小于 n 的整数),密文 C = Me mod n。
解密: (使用私钥) 收到密文 C 后,计算 M = Cd mod n。
解密为什么能成功?
Cd ≡ (Me)d ≡ Me×d (mod n)
因为 e × d ≡ 1 (mod φ(n)),所以 e × d = k × φ(n) + 1。
Me×d = Mk×φ(n) + 1 = (Mφ(n))k × M1 (mod n)
根据 欧拉定理,如果 M 与 n 互质,Mφ(n) ≡ 1 (mod n)。所以:
(Mφ(n))k × M ≡ 1k × M ≡ M (mod n)
(即使 M 与 n 不互质,也可以证明这个解密过程仍然有效。)
因此,知道私钥 d 的人可以将密文 C 解密回明文 M。而不知道 d(或者等价地,不知道 p 和 q 从而无法计算 φ(n) 和 d)的人,很难从公钥 (n, e) 和密文 C 中恢复 M。
正如前面提到的,欧拉函数 φ(n) 是一个重要的 积性函数 (Multiplicative Function)。
这意味着,如果两个正整数 m 和 n 互质 (gcd(m, n) = 1),那么它们乘积的欧拉函数值等于它们各自欧拉函数值的乘积:
φ(m × n) = φ(m) × φ(n) (当 gcd(m, n) = 1)
重要提示: 这个性质要求 m 和 n 必须互质。
积性是数论函数的一个重要特性,它使得我们可以通过研究函数在质数幂即形如 pk 的数,其中 p 是质数,k 是正整数。上的取值,来推断它在所有正整数上的取值。结合唯一分解定理(算术基本定理),任何正整数 n > 1 都可以唯一地分解为质数幂的乘积 n = p1k1 p2k2 ... prkr。由于不同的质数幂 piki 和 pjkj (i ≠ j) 总是互质的,我们可以应用积性性质:
φ(n) = φ(p1k1 × p2k2 × ... × prkr) = φ(p1k1) × φ(p2k2) × ... × φ(prkr)
这就是为什么计算 φ(pk) 很重要的原因,也是质因数分解公式法的基础。
准备好测试你的理解了吗?输入一个数字 n,然后尝试估算 φ(n) 的值。