威尔逊定理

威尔逊定理是数论中的一个重要定理,它提供了判断一个正整数是否为质数的充分必要条件。通过模运算,证明了(p-1)!equiv-1(modp)当且仅当p是质数。文章探讨了定理与群论的关系,并通过举例说明其在实际问题中的应用,特别是涉及到计算分式进位的情况,与质数的检测关联起来。

威尔逊定理

威尔逊定理是数论四大基本定理之一,而且似乎和群论还有很多奥秘重重的关系。

然而用处不大。

威尔逊定理指的是:
( p − 1 ) ! ≡ − 1        ( m o d    p ) ⇔ p ∈ P (p-1)!\equiv -1\;\;\;(mod\;p)\Leftrightarrow p\in\mathbb{P} (p1)!1(modp)pP
换句话说就是: ( p − 1 ) ! ≡ − 1        ( m o d    p ) (p-1)!\equiv -1\;\;\;(mod\;p) (p1)!1(modp)是p为质数的充分必要条件。

注意 − 1 ≡ p − 1        ( m o d    p ) -1\equiv p-1\;\;\;(mod\;p) 1p1(modp)

威尔逊定理的证明也是奥秘重重:

当p=1,2,3,4时,显然成立。

假设 p > 4 p>4 p>4

若p为合数

p为完全平方数

k = p k=\sqrt p k=p ,由于 4 < p 4<p 4<p,因而 2 < k 2<k 2<k,则 2 k < p 2k<p 2k<p
( p − 1 ) ! = 1 × 2 × . . . × k × . . . × 2 k × . . . × ( p − 2 ) × ( p − 1 ) (p-1)!=1\times2\times...\times k\times...\times 2k\times...\times (p-2)\times(p-1) (p1)!=1×2×...×k×...×2k×...×(p2)×(p1)

则有: ( p − 1 ) ! ≡ X ⋅ 2 ⋅ k 2 ≡ X ′ ⋅ p ≡ 0        ( m o d    p ) (p-1)!\equiv X\cdot2\cdot k^2\equiv X'\cdot p\equiv 0\;\;\;(mod\;p) (p1)!X2k2Xp0(modp)

若p不为完全平方数

( p − 1 ) ! = 1 × 2 × . . . × ( p − 2 ) × ( p − 1 ) (p-1)!=1\times 2\times ...\times (p-2)\times(p-1) (p1)!=1×2×...×(p2)×(p1)
其中必然存在 p p p的一对因子相乘等于 p p p,因此 ( p − 1 ) ! ≡ 0        ( m o d    p ) (p-1)!\equiv 0\;\;\;(mod\;p) (p1)!0(modp)

若p为质数

则集合 S = { 1 , 2 , . . . , p − 2 , p − 1 } S=\{1,2,...,p-2,p-1\} S={1,2,...,p2,p1} p p p的一个既约剩余系。
a ∈ S a\in S aS,根据欧拉定理中的证明, S ′ = { 1 ⋅ a , 2 ⋅ a , . . . , a ⋅ ( p − 2 ) , a ⋅ ( p − 1 ) } S'=\{1\cdot a,2\cdot a,...,a\cdot(p-2),a\cdot(p-1)\} S={1a,2a,...,a(p2),a(p1)}也为 p p p的一个简化剩余系。

新的既约剩余系中必然存在且仅有一个元素u,使得 u ≡ 1        ( m o d    p ) u\equiv 1\;\;\;(mod\; p) u1(modp)

我们断言:对于 x ∈ S , x = 2 , . . . , p − 2 x\in S,x=2,...,p-2 xS,x=2,...,p2,必然一一对应一个互不相同的,并且不等于自身的 a a a,使得 a x ≡ 1 ax\equiv 1 ax1

x = a x=a x=a,则 a x ≡ 1 ax\equiv1 ax1,即 x 2 ≡ 1 x^2\equiv 1 x21,因此 x 2 − 1 ≡ 0 x^2-1\equiv 0 x210,就是 ( x − 1 ) ( x + 1 ) ≡ 0 (x-1)(x+1)\equiv 0 (x1)(x+1)0,此时 x ≡ 1 或 − 1 x\equiv 1或-1 x11。模意义下 − 1 -1 1就是 p − 1 p-1 p1

因而 x ≢ a x\not\equiv a xa
先说不可能有一个 x x x对应多个 a a a,使得 a x ≡ 1 , a ′ x ≡ 1 ax\equiv 1,a'x\equiv 1 ax1,ax1
假设存在两个 a a a,使得 a x ≡ 1 , a ′ x ≡ 1        ( a ≢ a ′ ) ax\equiv 1,a'x\equiv 1\;\;\;(a\not\equiv a') ax1,ax1(aa),则 a x ≡ a ′ x ax\equiv a'x axax,也即 a ≡ a ′ a\equiv a' aa,矛盾。

再说不可能存在一个 a a a对应多个 x x x,同理。

因此 { 2 , 3 , . . . , p − 2 } \{2,3,...,p-2\} {2,3,...,p2}这些数两两配对,乘积均为模意义下1,即: ∏ i = 2 p − 2 i ≡ 1 \overset{p-2}{\underset{i=2}\prod}i\equiv 1 i=2p2i1

此时:
( p − 1 ) ! ≡ 1 × ( ∏ i = 2 p − 2 i ) × ( p − 1 ) ≡ 1 × 1 × ( p − 1 ) ≡ p − 1 ≡ − 1 (p-1)!\equiv1\times\left(\overset{p-2}{\underset{i=2}\prod}i\right)\times(p-1)\equiv1\times1\times(p-1)\equiv p-1\equiv -1 (p1)!1×(i=2p2i)×(p1)1×1×(p1)p11

QED.

例题

威尔逊定理的题挺少的。

题目描述:
S n = ∑ k = 1 n ⌊ ( 3 k + 6 ) ! + 1 3 k + 7 − ⌊ ( 3 k + 6 ) ! 3 x + 7 ⌋ ⌋ S_n=\overset{n}{\underset{k=1}\sum}\left\lfloor{\frac{(3k+6)!+1}{3k+7}-\left\lfloor{\frac{(3k+6)!}{3x+7}}\right\rfloor}\right\rfloor Sn=k=1n3k+7(3k+6)!+13x+7(3k+6)!

目测这个形式很丑,令 x = 3 k + 7 x=3k+7 x=3k+7:
那么枚举上界应该是: k ≤ n k\leq n kn,即 x − 7 3 ≤ n \frac {x-7} 3\leq n 3x7n, x ≤ 3 n + 7 x\leq 3n+7 x3n+7

式子变形为:
= ∑ x = 1 3 n + 7 ⌊ ( x − 1 ) ! + 1 x − ⌊ ( x − 1 ) ! x ⌋ ⌋ =\overset{3n+7}{\underset{x=1}\sum}\left\lfloor{\frac{(x-1)!+1}{x}-\left\lfloor{\frac{(x-1)!}{x}}\right\rfloor}\right\rfloor =x=13n+7x(x1)!+1x(x1)!

很明显括号内是一个描述分式进位的东西,当且仅当 ( x − 1 ) ! + 1 x \frac{(x-1)!+1}{x} x(x1)!+1会使得x进位时,括号内的值为1,否则为0.

(这里说的进位,例如 4 5 = 0 \frac 4 5=0 54=0,如果有 4 + 1 5 = 1 \frac {4+1}5=1 54+1=1,那么就称 5 5 5有进位)

因此我们注意到,当且仅当 ( p − 1 ) ! ≡ p − 1 ≡ − 1        ( m o d    p ) (p-1)!\equiv p-1\equiv -1\;\;\;(mod\;p) (p1)!p11(modp)时,才有进位。

因此处理一下 [ 1 , 3 n + 7 ] [1,3n+7] [1,3n+7]范围内形如 3 k + 7 3k+7 3k+7的质数数量就可以了。

后记

于是皆大欢喜。

### 关于 Codeforces 平台上与威尔逊定理相关的编程问题及解决方案 #### 威尔逊定理简介 威尔逊定理是一个重要的数论结论,它表明:如果 $p$ 是一个质数,则 $(p-1)! \equiv -1 \ (\text{mod}\ p)$。换句话说,$(p-1)! + 1$ 可被 $p$ 整除[^5]。这一性质在许多涉及质数检测和大数运算的算法竞赛题目中有广泛的应用。 --- #### 经典题目解析与实现 以下是几道典型的 Codeforces 题目以及它们基于威尔逊定理的解决方法: --- ##### **题目一:Codeforces 1295D** 该题的核心在于判断给定区间内有多少个数满足某种特殊条件,而这些条件可以通过威尔逊定理简化为对阶乘取模的结果分析[^6]。 ###### 解决方案 为了高效地处理大规模数据,我们可以预先计算出所有可能需要用到的阶乘值及其对应的模意义下的结果。具体代码如下所示: ```cpp #include <bits/stdc++.h> using namespace std; typedef long long ll; const int MOD = 1e9 + 7; ll factorial_mod(ll n, ll p) { if (n >= p) return 0; ll result = 1; for (ll i = 1; i <= n; ++i) { result = (result * i) % p; } return result; } bool is_prime_wilson(ll p) { if (factorial_mod(p - 1, p) != p - 1) return false; return true; } int main() { ios::sync_with_stdio(false); cin.tie(0); ll l, r; cin >> l >> r; int count = 0; for (ll i = max(l, 2LL); i <= r; ++i) { if (is_prime_wilson(i)) { count++; } } cout << count << "\n"; } ``` 这段程序首先定义了一个用于计算阶乘并对指定素数取模的功能函数 `factorial_mod`,接着借助这个工具实现了依据威尔逊定理判定某个自然数是否为素数的逻辑[^6]。 --- ##### **题目二:Prime Number Theorem Application** 虽然这不是一道具体的 Codeforces 题目名称,但它代表了一类常见的挑战场景——即如何利用包括但不限于威尔逊在内的各种经典数学理论去优化复杂度较高的枚举过程[^7]。 ###### 实现细节 当面临需要频繁验证多个候选数字是否属于素数集合的任务时,单纯依靠试除法往往难以达到理想的时间效率标准。此时引入诸如埃拉托斯特尼筛法或者更高级别的线性筛技术固然是一种不错的选择;然而,在某些特定条件下(例如仅需关心少量极大数值的情况),直接调用威尔逊定理反而能带来意想不到的优势。 示例代码片段展示如下: ```python def wilsons_theorem_test(n): from math import factorial if n < 2: return False elif pow(factorial(n - 1), 1, n) == n - 1: return True else: return False # Example Usage print(wilsons_theorem_test(11)) # Output: True ``` 在这里我们采用了 Python 内置库中的高精度整数运算能力来模拟整个流程,尽管如此仍需注意实际比赛中应尽量避免因过度依赖此类特性而导致性能瓶颈的发生[^7]。 --- #### 总结 综上所述,通过对威尔逊定理深入理解并灵活运用到不同类型的算法设计当中,不仅可以帮助参赛者更好地应对那些表面上看似棘手但实际上蕴含深刻规律可循的问题,而且还有助于培养更加严谨缜密的思维习惯! ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值