欧拉函数与欧拉定理

一个交互式的数论学习平台

一、欧拉函数 φ(n) 的讲解与演示

欧拉函数 φ(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)

下面我们通过一个“数字圈”的动画来直观感受这个定理是如何产生的。

与 n=9 互质的数的集合 S

点击“开始动画演示”按钮,观察数字的变化。

我们会将所有与 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 互质。

  • 例如:n = 7 (质数)。小于等于 7 且与 7 互质的数是 1, 2, 3, 4, 5, 6,共 6 个。所以 φ(7) = 6 = 7 - 1。
  • 例如:n = 12 (合数)。小于等于 12 且与 12 互质的数是 1, 5, 7, 11,共 4 个。所以 φ(12) = 4,而 12 - 1 = 11。显然 φ(12) ≠ 12 - 1。

欧拉定理 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),但这超出了基础欧拉定理的范围。)

欧拉函数有一些方便计算的性质,特别是对于质数的幂和两个不同质数的乘积:

  1. 质数的幂: 如果 p 是一个质数,k 是一个正整数 (k ≥ 1),那么与 pk 互质的数就是那些不被 p 整除的数。在 1 到 pk 中,p 的倍数有 pk-1 个 (p, 2p, ..., pk-1·p)。所以:

    φ(pk) = pk - pk-1 = pk-1(p - 1) = pk (1 - 1/p)

    例如:φ(8) = φ(23) = 23 - 22 = 8 - 4 = 4。 (与8互质的是1, 3, 5, 7)
    例如:φ(27) = φ(33) = 33 - 32 = 27 - 9 = 18。
  2. 两个不同质数的乘积: 如果 p 和 q 是两个不同的质数,那么根据欧拉函数的 积性如果函数 f(n) 满足:对于任意互质的正整数 m 和 n,都有 f(mn) = f(m)f(n),则称 f(n) 是积性函数。欧拉函数 φ(n) 就是一个积性函数。 性质:

    φ(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)
    例如:φ(77) = φ(7 × 11) = (7 - 1) × (11 - 1) = 6 × 10 = 60。

利用这些性质,结合欧拉函数的积性,我们可以计算任意正整数 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) 的值。观察值的变化趋势:

观察图表,你可能会发现:

  • 当 n 是 质数 p 时,φ(p) = p - 1,这是图像上的局部最大值点(相对于前一个数)。
  • 偶数 n 的 φ(n) 值通常比 n/2 小或等于 n/2(因为至少所有大于 n/2 的偶数都不与 n 互质,且 φ(n) ≤ n-1)。
  • φ(n) 的值 整体上是增长的,但波动很大。
  • 当 n 含有 较多不同的小质因数 时,φ(n) 相对于 n 的比值会比较小 (例如 φ(30) = 8)。

提示:图表将在您展开此部分时生成。

欧拉函数和欧拉定理是现代密码学基石之一——RSA 公钥加密算法 的核心数学原理。

RSA 的安全性很大程度上依赖于大整数质因数分解的困难性,以及计算欧拉函数 φ(n) 的困难性(如果不知道 n 的质因数分解)。

RSA 密钥生成过程简述:

  1. 选择两个非常大的 秘密质数这两个质数 p 和 q 是保密的,只有密钥的拥有者知道。它们的乘积 n 是公开的。 p 和 q。
  2. 计算它们的乘积 n = p × q。这个 n 是公开的,作为模数。
  3. 计算 φ(n) = φ(p) × φ(q) = (p - 1) × (q - 1)。这个值是保密的。
  4. 选择一个整数 e (1 < e < φ(n)),使得 e 与 φ(n) 互质 (gcd(e, φ(n)) = 1)。e 作为公钥指数,是公开的。
  5. 计算 e 关于模 φ(n) 的乘法逆元找到一个整数 d,使得 e × d ≡ 1 (mod φ(n))。这通常使用扩展欧几里得算法计算。 d。即找到 d 使得 e × d = k × φ(n) + 1 (对于某个整数 k)。d 作为私钥指数,是保密的。

公钥: (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 必须互质

  • 正确示例: gcd(4, 9) = 1。 φ(4) = 2 (1, 3)。φ(9) = 6 (1, 2, 4, 5, 7, 8)。 φ(36) = φ(4 × 9) = φ(4) × φ(9) = 2 × 6 = 12。 我们之前计算过 φ(36) = 12,验证了这一点。
  • 错误示例: gcd(2, 4) = 2 ≠ 1。 φ(2) = 1。φ(4) = 2。 φ(8) = φ(2 × 4) = 4。 但 φ(2) × φ(4) = 1 × 2 = 2。 这里 φ(8) ≠ φ(2) × φ(4),因为 2 和 4 不互质。

积性是数论函数的一个重要特性,它使得我们可以通过研究函数在质数幂即形如 pk 的数,其中 p 是质数,k 是正整数。上的取值,来推断它在所有正整数上的取值。结合唯一分解定理(算术基本定理),任何正整数 n > 1 都可以唯一地分解为质数幂的乘积 n = p1k1 p2k2 ... prkr。由于不同的质数幂 piki 和 pjkj (i ≠ j) 总是互质的,我们可以应用积性性质:

φ(n) = φ(p1k1 × p2k2 × ... × prkr) = φ(p1k1) × φ(p2k2) × ... × φ(prkr)

这就是为什么计算 φ(pk) 很重要的原因,也是质因数分解公式法的基础。

准备好测试你的理解了吗?输入一个数字 n,然后尝试估算 φ(n) 的值。