ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

夜深人静写算法(三十七)- 威尔逊定理

2021-07-03 12:58:28  阅读:458  来源: 互联网

标签:... 夜深人静 定理 威尔逊 三十七 times 素数 equiv mod


文章目录

一、前言

  欧拉定理费马小定理中国剩余定理 我们都(假设)已经学会了。那么今天的这个定理,是非常重要的。因为只有学会了它,你才能凑齐数论四大定理。
  没错,这个定理考试不会考,ACM 基本很少遇到(遇到过三道题),LeetCode 上没有,面试官也不会问,它叫 威尔逊定理。所以建议这篇文章,能不看就不看,基本是在浪费时间。实在想看,我也不会阻拦。
  当然,无论有没有读者,我都会继续更新,因为我就是我,我只是单纯的想要凑齐数论 四大定理:欧拉定理、费马小定理、中国剩余定理、威尔逊定理。
在这里插入图片描述

二、威尔逊定理

1、定义

  • ( p − 1 ) ! ≡ − 1 ( m o d   p ) (p-1)! \equiv -1(mod \ p) (p−1)!≡−1(mod p) 是 p p p 为素数 的 充分必要条件。

2、充分性

  • 对于 p p p 不是素数的情况,我们分成以下几种情况来讨论:
  • 当 p = 1 p=1 p=1 时,直接带入, ( 1 − 1 ) ! ≡ 0 ( m o d   1 ) (1-1)! \equiv 0(mod \ 1) (1−1)!≡0(mod 1);
  • 当 p = 4 p=4 p=4 时,直接带入, ( 4 − 1 ) ! ≡ 2 ( m o d   4 ) (4-1)! \equiv 2(mod \ 4) (4−1)!≡2(mod 4);
  • 当 p > 4 p \gt 4 p>4 时:

a)当 p p p 是 完全平方数

  • 则 p = k 2 p = k^2 p=k2,由于 p > 4 p > 4 p>4,则 k > 2 k > 2 k>2;
  • 然后,我们比较以下 2 k 2k 2k 和 p p p 的大小,即:
  • 2 k − p = 2 k − k 2 = 2 k − k 2 − 1 + 1 = − ( k − 1 ) 2 + 1 < 0 \begin{aligned}2k - p &= 2k - k^2 \\ &= 2k - k^2 - 1 + 1 \\ &= -(k-1)^2 + 1 \lt 0\end{aligned} 2k−p​=2k−k2=2k−k2−1+1=−(k−1)2+1<0​
  • 于是有 k < p k \lt p k<p, 2 k < p 2k \lt p 2k<p 成立。
  • ( p − 1 ) ! = 1 × 2 × . . . × k × . . . × 2 k × . . . ( p − 1 ) = k × 2 k × n = 2 n k 2 = 2 n p \begin{aligned}(p-1)! &= 1 \times 2 \times ... \times k \times ... \times 2k \times ... (p-1) \\ &= k \times 2k \times n \\ &= 2n k^2 \\ &= 2np \end{aligned} (p−1)!​=1×2×...×k×...×2k×...(p−1)=k×2k×n=2nk2=2np​
  • 所以有:
  • ( p − 1 ) ! ≡ 0 ( m o d   p ) (p-1)! \equiv 0(mod \ p) (p−1)!≡0(mod p)

b)当 p p p 不是 完全平方数

  • 那么, p p p 必然等于两个完全不相等的数 a a a 和 b b b 的乘积,不妨设 a < b a \lt b a<b,则满足:
  • 1 < a < b < p 1 \lt a \lt b \lt p 1<a<b<p
  • ( p − 1 ) ! = 1 × 2 × . . . × a × . . . × b × . . . ( p − 1 ) = a × b × n = n a b = n p \begin{aligned}(p-1)! &= 1 \times 2 \times ... \times a \times ... \times b \times ... (p-1) \\ &= a \times b \times n \\ &= nab \\ &= np \end{aligned} (p−1)!​=1×2×...×a×...×b×...(p−1)=a×b×n=nab=np​
  • 所以有:
  • ( p − 1 ) ! ≡ 0 ( m o d   p ) (p-1)! \equiv 0(mod \ p) (p−1)!≡0(mod p)

3、必要性

  • 当 p p p 为素数时,考虑二次剩余式:
  • x 2 ≡ 1 ( m o d   p ) x^2 \equiv 1(mod \ p) x2≡1(mod p)
  • 移项得到 x 2 − 1 ≡ 0 ( m o d   p ) x^2-1 \equiv 0(mod \ p) x2−1≡0(mod p)
  • 分解因式得到:
  • ( x − 1 ) ( x + 1 ) ≡ 0 ( m o d   p ) (x-1)(x+1) \equiv 0(mod \ p) (x−1)(x+1)≡0(mod p)
  • 从而可得:
  • x ≡ 1 ( m o d   p ) x \equiv 1(mod \ p) x≡1(mod p) 或者 x ≡ p − 1 ( m o d   p ) x \equiv p-1(mod \ p) x≡p−1(mod p)
  • 那么我们抛开 1 1 1 和 p − 1 p-1 p−1 这两个数不管,对于 a ∈ [ 2 , p − 2 ] a \in [2, p-2] a∈[2,p−2],必然存在一个和它不相等的逆元 a − 1 ∈ [ 2 , p − 2 ] a^{-1} \in [2, p-2] a−1∈[2,p−2],满足:
  • a a − 1 ≡ 1 ( m o d   p ) aa^{-1} \equiv 1(mod \ p) aa−1≡1(mod p)
  • 所以必然有 ( p − 3 ) 2 \frac {(p-3)} {2} 2(p−3)​ 对数相乘的乘积为 1,即:
  • ( p − 2 ) ! ≡ 1 ( m o d   p ) (p-2)! \equiv 1(mod \ p) (p−2)!≡1(mod p)
  • 等式两边同时乘上 p − 1 p-1 p−1 就等到的威尔逊定理。
  • ( p − 1 ) ! ≡ p − 1 ( m o d   p ) ≡ − 1 ( m o d   p ) (p-1)! \equiv p-1(mod \ p) \equiv -1(mod \ p) (p−1)!≡p−1(mod p)≡−1(mod p)

三、威尔逊定理的应用

1、广义情况

【例题1】给定 n ( 2 ≤ n ≤ 1 0 9 ) n(2 \le n \le 10^9) n(2≤n≤109),求: ( n − 1 ) !   m o d   n (n-1)! \ mod \ n (n−1)! mod n

  • 这个问题推广到了广义的 ( n − 1 ) !   m o d   n (n-1)! \ mod \ n (n−1)! mod n 问题,我们知道:
  • 当 n n n 为素数时,这个就是威尔逊定理,答案为 n − 1 n-1 n−1;
  • 当 n n n 不为素数时,我们在证明威尔逊定理的充分性时,已经对它进行了一个分类,当 n = 4 n = 4 n=4 时,心算结果为 2;否则,可以根据 完全平方数 和 非完全平方数,得到结果为 0。

2、配合素数判定

【例题2】给定 n ( n ≤ 1 0 6 ) n (n \le 10^6) n(n≤106),求 S n S_n Sn​。 [ x ] [x] [x] 代表取下整,其中 S n S_n Sn​ 定义如下:

  • 令 d = 3 k + 7 d = 3k + 7 d=3k+7,则加和的部分我们可以看成是:
  • [ ( d − 1 ) ! + 1 d − [ ( d − 1 ) ! d ] ] [ \frac {(d-1)! + 1} {d} - [\frac {(d-1)!} {d}] ] [d(d−1)!+1​−[d(d−1)!​]]
  • 根据威尔逊定理可得,只要 d d d 是素数, ( d − 1 ) ! + 1 d \frac {(d-1)! + 1} {d} d(d−1)!+1​ 必然是整数,而 [ ( d − 1 ) ! d ] [\frac {(d-1)!} {d}] [d(d−1)!​] 必然比 ( d − 1 ) ! + 1 d \frac {(d-1)! + 1} {d} d(d−1)!+1​ 小 1,所以当 d d d 为素数时,有:
  • [ ( d − 1 ) ! + 1 d − [ ( d − 1 ) ! d ] ] = 1 [ \frac {(d-1)! + 1} {d} - [\frac {(d-1)!} {d}] ] = 1 [d(d−1)!+1​−[d(d−1)!​]]=1
  • 当 d d d 不是素数时,满足:
  • [ ( d − 1 ) ! + 1 d − [ ( d − 1 ) ! d ] ] = 0 [ \frac {(d-1)! + 1} {d} - [\frac {(d-1)!} {d}] ] = 0 [d(d−1)!+1​−[d(d−1)!​]]=0
  • 所以只要进行素数筛选,筛选出所有 [ 1 , 3000007 ] [1, 3000007] [1,3000007] 中的素数,然后做一次预处理,答案就求出来了。

3、配合逆元的应用

【例题3】给定一个素数 p ( p ≤ 1 0 9 ) p(p \le 10^9) p(p≤109),求找到一个比 p p p 小的最大的素数 q q q, 然后给出以下表达式的值: q !   m o d   p q! \ mod \ p q! mod p

  • 由威尔逊定理:
  • ( p − 1 ) ! ≡ − 1 ( m o d   p ) (p-1)! \equiv -1 (mod \ p) (p−1)!≡−1(mod p)
  • 可以拆成:
  • q ! ( q + 1 ) . . . ( p − 1 ) ≡ − 1 ( m o d   p ) q!(q+1)...(p-1) \equiv -1 (mod \ p) q!(q+1)...(p−1)≡−1(mod p)
  • 由于 p p p为素数,同余式两边同时乘上 ( q + 1 ) . . . ( p − 1 ) (q+1)...(p-1) (q+1)...(p−1) 的逆元 [ ( q + 1 ) . . . ( p − 1 ) ] − 1 [ (q+1)...(p-1) ]^{-1} [(q+1)...(p−1)]−1。
  • 得到:
  • q ! ≡ − ( [ ( q + 1 ) . . . ( p − 1 ) ] − 1 ) ( m o d   p ) q! \equiv -( [(q+1)...(p-1)]^{-1} ) (mod \ p) q!≡−([(q+1)...(p−1)]−1)(mod p)
  • 于是,我们只需要逆序枚举 i ∈ [ 2 , p − 1 ] i \in [2, p-1] i∈[2,p−1],枚举过程不断进行素数判定和逆元求解,如果得到 q q q 为 素数则打破枚举。枚举过程中将所有逆元相乘再乘上 p − 1 p-1 p−1就是要求的结果了。

  • 关于 威尔逊定理 的内容到这里就结束了。
  • 如果还有不懂的问题,可以 想方设法 找到作者的微信进行在线咨询。


四、威尔逊定理相关题集整理

题目链接难度解析
HDU 5391 Zball in Tina Town★☆☆☆☆【例题1】威尔逊定理 + 素数判定
HDU 2973 YAPTCHA★☆☆☆☆【例题2】威尔逊定理 + 素数筛选
HDU 6608 Fansblog★☆☆☆☆【例题3】威尔逊定理 + 大素数判定

标签:...,夜深人静,定理,威尔逊,三十七,times,素数,equiv,mod
来源: https://blog.csdn.net/WhereIsHeroFrom/article/details/118432611

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有