判断素数的方法(Wilson定理与应用)

序言

Wilson定理

p ( p 1 ) ! 1 ( m o d    p ) p为质数\Leftrightarrow(p-1)! \equiv -1(\mod p)

证明

  • 既然是要证明两个条件等价,肯定要分成两个部分证明:

1.若 ( p 1 ) ! 1 ( m o d    p ) (p-1)! \equiv -1(\mod p) ,则p为质数。(必要性)
2.若p为质数,则 ( p 1 ) ! 1 ( m o d    p ) (p-1)! \equiv -1(\mod p) 。(充分性)

必要性证明

  • ( p 1 ) ! = k p 1 (p-1)!=kp-1 ,由于相邻的2个数 a a a + 1 a+1 一定互质,所以可得 ( p 1 ) ! (p-1)! k p kp 一定互质。
  • 又可以显然地得出 ( p 1 ) ! (p-1)! p p 一定互质。
  • 因为 ( p 1 ) ! = 1 2 3 . . . ( p 1 ) (p-1)!=1*2*3*...*(p-1)
  • 所以 [ 1 , p 1 ] [1,p-1] 中的每一个数都与 p p 互质,所以 p p 为质数。
  • (是不是很简单呢?)

充分性证明

  • p = 2 p=2 p = 3 p=3 时,证明显然。
  • 下面考虑 p > 3 p>3 的情况:
  • 发现 p 1 1 ( m o d    p ) p-1 \equiv -1(\mod p) 1 1 ( m o d    p ) 1 \equiv 1 (\mod p) ,所以只需证明 2 3 . . . ( p 2 ) 1 ( m o d    p ) 2*3*...*(p-2) \equiv 1(\mod p) 即可。
  • 接下来的分析就需要一点脑回路了…
  • 对于 [ 2 , p 2 ] [2,p-2] 中的一个数 a a ,由于 g c d ( a , p ) = 1 gcd(a,p)=1 ,所以同余方程 a x 1 ( m o d    p ) a*x \equiv1(\mod p) x [ 1 , p 1 ] x \in [1,p-1] 一定有解。
  • x = a x=a ,则 a a 1 ( m o d    p ) a*a \equiv 1(\mod p) ,所以 ( a 1 ) ( a + 1 ) 0 ( m o d    p ) (a-1)(a+1) \equiv 0(\mod p)
  • 所以 ( a 1 ) p (a-1)|p ( a + 1 ) p (a+1)|p
  • 但因为 a [ 2 , p 2 ] a \in [2,p-2] ,所以显然 ( a 1 ) p (a-1) \nmid p ( a + 1 ) p (a+1) \nmid p
  • 所以 x a x \neq a
  • x = 1 x=1 ,则显然 a = 1 a=1 ,因为 a [ 2 , p 2 ] a \in [2,p-2] ,所以 x 1 x \neq 1
  • x = p 1 x=p-1 ,则显然 a = p 1 a=p-1 ,因为 a [ 2 , p 2 ] a \in [2,p-2] ,所以 x p 1 x \neq p-1
  • 因为 x [ 1 , p 1 ] x \in [1,p-1] ,所以 x [ 2 , p 2 ] x \in [2,p-2]
  • 所以在 [ 2 , p 2 ] [2,p-2] 中,我们总能找到两两配对的数 a a b b 使得 a b 1 ( m o d    p ) a*b \equiv 1(\mod p) ,然后我们分别把它们乘起来,最后得到的结果便是 1 1
  • p = 7 p=7 为例。
  • [ 2 , p 2 ] [2,p-2] 中有 2 , 3 , 4 , 5 2,3,4,5
  • 我们进行分组 ( 2 , 4 ) (2,4) ( 3 , 5 ) (3,5) ,然后 2 3 4 5 ( 2 4 ) ( 3 5 ) 1 1 1 2*3*4*5 \equiv (2*4)*(3*5) \equiv 1*1 \equiv 1
  • 由于 p > 3 p>3 p p 为素数,所以 p p 必为奇数。所以 [ 2 , p 2 ] [2,p-2] 中一定有偶数个数,所以不会出现两两配对后余下一个的情况。
  • 因此得出 2 3 . . . ( p 2 ) 1 ( m o d    p ) 2*3*...*(p-2) \equiv 1(\mod p)
  • 所以 ( p 1 ) ! 1 ( m o d    p ) (p-1)! \equiv -1 (\mod p) ,得证。

应用

  • 证明了Wilson定理以后,你一定会发现这个东西既复杂又奇妙。
  • 紧接着,一个十分实际的问题挡在了你的面前:
  • “这个有什么应用呢?”
  • 显然,Wilson定理的一大用处就是用 ( p 1 ) ! 1 ( m o d    p ) (p-1)! \equiv -1 (\mod p) 来判断素数。当然有时会还会反过来用。
  • 不过你会发现,求阶乘的时间复杂度不是 O ( n ) O(n) 的吗?说了这么一大堆结果连个暴力都跟它差不多吗?
  • 确实,阶乘是一个非常麻烦的东西。但其实我们有阶乘的快速求法,时间复杂度达到 O ( l o g 2 2 n ) O(log_2^2n) 甚至 O ( l o g 2 n ) O(log_2n) ,可以爆踩之前的普通方法。
  • 但至于怎么快速求阶乘…等以后再说吧,毕竟这种东西用的也比较少!

总结

  • 不会快速求阶乘?
  • 还有更好的方法!
  • (未完待续)
发布了58 篇原创文章 · 获赞 12 · 访问量 8548

猜你喜欢

转载自blog.csdn.net/fengqiyuka/article/details/100007632