费马小定理
形式一(最常用):如果 \(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\) 的意义下是完全一样的,然后利用这个等价关系推导出结论。
-
构造第一个集合 \(S_1\)
所有小于 \(p\) 的正整数,把它们放进一个集合里:\(S_1 = \{ 1, 2, 3, \dots, p-1 \}\)。这个集合有 \(p-1\) 个元素。
-
构造第二个集合 \(S_2\)
现在,把集合 \(S_1\) 中的每一个元素都乘以 \(a\),得到一个新的集合 \(S_2 = \{ a, 2a, 3a, \dots, (p-1)a \}\)。
-
证明最关键的一步:\(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\) 的一个重新排列。
-
-
利用等价关系
既然集合 \(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}\)。
-
消去公因式
现在有式子 \(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\) 的倍数。

浙公网安备 33010602011771号