费马小定理

形式一(最常用):如果 \(p\) 是一个素数(质数),并且整数 \(a\) 不是 \(p\) 的倍数(也就是 \(a\) 除以 \(p\) 的余数不为 \(0\)),那么 \(a^{p-1} \equiv 1 \pmod {p}\)

形式二:如果 \(p\) 是一个素数,\(a\) 是任意整数,那么 \(a^p \equiv a \pmod {p}\)

这里的 \(\equiv\) 符号是“同余于”,\(x \equiv y \pmod {p}\) 的意思是 \(x\)\(y\) 除以 \(p\) 的余数相同。比如 \(17 \equiv 2 \pmod {5}\),因为 \(17\)\(2\) 除以 \(5\) 的余数都是 \(2\)

以下给出形式一的证明。

整个证明的核心思想是:构造两个集合,证明这两个集合在模 \(p\) 的意义下是完全一样的,然后利用这个等价关系推导出结论。

  1. 构造第一个集合 \(S_1\)

    所有小于 \(p\) 的正整数,把它们放进一个集合里:\(S_1 = \{ 1, 2, 3, \dots, p-1 \}\)。这个集合有 \(p-1\) 个元素。

  2. 构造第二个集合 \(S_2\)

    现在,把集合 \(S_1\) 中的每一个元素都乘以 \(a\),得到一个新的集合 \(S_2 = \{ a, 2a, 3a, \dots, (p-1)a \}\)

  3. 证明最关键的一步:\(S_1\)\(S_2\) 在模 \(p\) 的意义下是等价的

    也就是说,把 \(S_2\) 中所有元素都除以 \(p\) 取余数,得到的 \(p-1\) 个余数,恰好就是 \(S_1\) 中的 \(1,2,3,\dots,p-1\),只是顺序可能被打乱了。

    为了证明这一点,需要确认两件事:

    • \(S_2\) 中所有元素的余数都不为 \(0\)

      证明:假设 \(S_2\) 中有一个元素 \(ka\)(其中 \(k\)\(1\)\(p-1\) 之间的一个数)除以 \(p\) 的余数是 \(0\),也就是 \(ka \equiv 0 \pmod {p}\)。因为 \(p\) 是一个素数,如果它能整除 \(ka\),那么它必须能整除 \(k\) 或者 \(a\)。但根据前提,\(a\) 不是 \(p\) 的倍数,所以 \(p\) 不能整除 \(a\)。同时,\(k\) 的取值是 \(1,2,\dots,p-1\),都比 \(p\) 小,所以 \(p\) 也不能整除 \(k\)。既然 \(p\) 既不能整除 \(k\) 也不能整除 \(a\),那么它就不可能整除 \(ka\)。所以 \(ka\) 除以 \(p\) 的余数一定不为 \(0\)

    • \(S_2\) 中所有元素的余数都互不相同。

      证明:使用反证法。假设有两个不相同的元素 \(ia\)\(ja\)(其中 \(i \ne j\)),它们除以 \(p\) 的余数是相同的,也就是 \(ia \equiv ja \pmod {p}\)。根据同余的性质,可以移项,得到 \(ia - ja \equiv 0 \pmod {p}\),即 \((i-j)a \equiv 0 \pmod {p}\)。同样,因为 \(p\) 是素数且不能整除 \(a\),所以 \(p\) 必须能整除 \(i-j\)。但是 \(i\)\(j\) 都是从 \(1\)\(p-1\) 中选的,并且 \(i \ne j\)。那么 \(i-j\) 的取值范围在 \(-(p-2)\)\(p-2\) 之间,无论如何它的绝对值都小于 \(p\),且不为 \(0\)。一个大于 \(|i-j|\) 的素数 \(p\) 是不可能整除 \(i-j\) 的。这与推论“\(p\) 必须能整除 \(i-j\)”相矛盾!所以假设不成立。因此,\(S_2\) 中所有元素的余数一定是互不相同的。

    结论\(S_2\) 中的 \(p-1\) 个元素,它们除以 \(p\) 的余数,既不为 \(0\),又互不相同。那么这些余数只能是 \(1,2,3,\dots,p-1\) 的一个重新排列。

  4. 利用等价关系

    既然集合 \(S_1\)\(S_2\) 在模 \(p\) 的意义下是等价的,那么把各自集合中的所有元素全部乘起来,它们的结果在模 \(p\) 意义下也应该是等价的!

    • \(S_1\) 中所有元素的乘积\(1 \times 2 \times 3 \times \cdots \times (p-1) = (p-1)!\)
    • \(S_2\) 中所有元素的乘积\((a) \times (2a) \times (3a) \times \cdots \times ((p-1)a) = (1 \times 2 \times \cdots \times (p-1)) \times a^{p-1} = (p-1)! \times a^{p-1}\)

    因为两者的乘积在模 \(p\) 意义下等价,所以 \((p-1)! \times a^{p-1} \equiv (p-1)! \pmod {p}\)

  5. 消去公因式

    现在有式子 \(X Y \equiv X \pmod {p}\),想两边都“除以”\(X\),在同余运算中,只要 \(X\)\(p\) 互质(最大公约数为 \(1\)),就可以安全地“约掉”。

    这里的 \(X\)\((p-1)! = 1 \times 2 \times \cdots \times (p-1)\)。因为 \(p\) 是素数,它和 \(1\)\(p-1\) 之间的任何数都互质。所以 \(p\)\((p-1)!\) 也互质。

    因此,可以安全地在同余式两边约掉 \((p-1)!\),得到 \(a^{p-1} \equiv 1 \pmod {p}\)

    证明完毕!

这个证明的巧妙之处在于它没有直接去计算 \(a^{p-1}\),而是通过构造集合和利用素数的性质得出了结论。


例如,用 \(p=5\)(素数),\(a=3\)(不是 \(5\) 的倍数)来走一遍流程。

\(S_1 = \{ 1,2,3,4 \}\)\(S_2 = \{ 3, 6, 9, 12 \}\)\(S_2\)\(5\) 的余数:\(3,1,4,2\),这正是 \(S_1\) 的一个重新排列。计算 \(S_1\) 中元素的乘积 \(4! = 24 \equiv 4 \pmod {5}\)\(S_2\) 中元素的乘积 \(3 \times 6 \times 9 \times 12 = 1944\),除以 \(5\) 余数为 \(4\)\((4!) \times 3^{5-1} \equiv 4! \pmod {5}\)\(24 \times 3^{4} \equiv 24 \pmod {5}\),因为 \(24\)\(5\) 互质,约掉 \(24\) 得到 \(3^4 \equiv 1 \pmod {5}\)。而 \(3^4 = 81 = 16 \times 5 + 1\),完全正确。


选择题:有如下递归代码

solve(t, n):
	if t=1 return 1
	else return 5*solve(t-1,n) mod n

solve(23,23) 的结果为?

  • A. 1
  • B. 7
  • C. 12
  • D. 22
答案

A

可以将递归函数展开,寻找其数学规律。将乘法式子自底向上代入,可以得到实际上就是求 \(5^{t-1} \bmod n\)

代入题目数据,等价于计算 \(5^{23-1} \bmod 23\),即 \(5^{22} \bmod 23\)

这是一个典型的模幂运算,可以使用费马小定理来快速求解,因为 \(23\) 是一个质数,而 \(5\) 不是 \(23\) 的倍数。

posted @ 2025-07-14 11:06  RonChen  阅读(161)  评论(0)    收藏  举报