序言
Wilson定理
p为质数⇔(p−1)!≡−1(modp)
证明
- 既然是要证明两个条件等价,肯定要分成两个部分证明:
1.若
(p−1)!≡−1(modp),则p为质数。(必要性)
2.若p为质数,则
(p−1)!≡−1(modp)。(充分性)
必要性证明
- 设
(p−1)!=kp−1,由于相邻的2个数
a与
a+1一定互质,所以可得
(p−1)!与
kp一定互质。
- 又可以显然地得出
(p−1)!与
p一定互质。
- 因为
(p−1)!=1∗2∗3∗...∗(p−1)。
- 所以
[1,p−1]中的每一个数都与
p互质,所以
p为质数。
(是不是很简单呢?)
充分性证明
-
p=2或
p=3时,证明显然。
- 下面考虑
p>3的情况:
- 发现
p−1≡−1(modp),
1≡1(modp),所以只需证明
2∗3∗...∗(p−2)≡1(modp)即可。
- 接下来的分析就需要一点脑回路了…
- 对于
[2,p−2]中的一个数
a,由于
gcd(a,p)=1,所以同余方程
a∗x≡1(modp)且
x∈[1,p−1]一定有解。
- 若
x=a,则
a∗a≡1(modp),所以
(a−1)(a+1)≡0(modp)。
- 所以
(a−1)∣p或
(a+1)∣p。
- 但因为
a∈[2,p−2],所以显然
(a−1)∤p且
(a+1)∤p。
- 所以
x̸=a。
- 若
x=1,则显然
a=1,因为
a∈[2,p−2],所以
x̸=1。
- 若
x=p−1,则显然
a=p−1,因为
a∈[2,p−2],所以
x̸=p−1。
- 因为
x∈[1,p−1],所以
x∈[2,p−2]。
- 所以在
[2,p−2]中,我们总能找到两两配对的数
a,
b使得
a∗b≡1(modp),然后我们分别把它们乘起来,最后得到的结果便是
1。
- 以
p=7为例。
-
[2,p−2]中有
2,3,4,5
- 我们进行分组
(2,4),
(3,5),然后
2∗3∗4∗5≡(2∗4)∗(3∗5)≡1∗1≡1。
- 由于
p>3且
p为素数,所以
p必为奇数。所以
[2,p−2]中一定有偶数个数,所以不会出现两两配对后余下一个的情况。
- 因此得出
2∗3∗...∗(p−2)≡1(modp)。
- 所以
(p−1)!≡−1(modp),得证。
应用
- 证明了Wilson定理以后,你一定会发现这个东西既复杂又奇妙。
- 紧接着,一个十分实际的问题挡在了你的面前:
- “这个有什么应用呢?”
- 显然,Wilson定理的一大用处就是用
(p−1)!≡−1(modp)来判断素数。当然有时会还会反过来用。
- 不过你会发现,求阶乘的时间复杂度不是
O(n)的吗?说了这么一大堆结果连个暴力都跟它差不多吗?
- 确实,阶乘是一个非常麻烦的东西。但其实我们有阶乘的快速求法,时间复杂度达到
O(log22n)甚至
O(log2n),可以爆踩之前的普通方法。
- 但至于怎么快速求阶乘…等以后再说吧,毕竟这种东西用的也比较少!
总结