威爾遜定理

一、定理概述

威爾遜定理(Wilson’s Theorem)是一個關於質數的性質,通常是指以下這個定理:

若p為質數,則(p-1)! ≡ -1 (mod p)

即p是質數時,(p-1)的階乘模p等於-1。

由此可以得到一個直接判斷質數的方法,若一個數n能夠滿足(n-1)! ≡ -1 (mod n),則n是質數。

二、證明過程

威爾遜定理的證明過程比較簡單,這裡簡單介紹一下:

設p為一個大於2的質數,則p-1是一個偶數,可以將(p-1)!寫成兩個部分的積:

(p-1)! = 1*2*3*...*(p/2)*(p/2+1)*...*(p-1)

其中(p/2+1)~(p-1)組成的這部分可以表示為:

(p/2+1)*(p/2+2)*...*(p-1)
= (-1)*(-2)*...*(-p/2)
= (-1)^(p/2)*[(p/2)!]^2

將上式帶入主式,得到:

(p-1)! = [(p-1)/2]!^2 * (-1)^(p/2) * (mod p)

當且僅當(p-1)/2為偶數時,(-1)^(p/2)等於1。因此:

(p-1)! ≡ [(p-1)/2]!^2 (mod p)

又因為p是質數,所以剩下的部分[(p-1)/2]!^2肯定不是0,而是模p意義下的一個非零平方數。因此,當(p-1)!模p等於-1時,[(p-1)/2]!^2模p等於1,從而[(p-1)/2]! ≡ 1或(p-1) (mod p)。

若[(p-1)/2]! ≡ (p-1) (mod p),則(p-1)/2 + 1 ~ p-1這部分中肯定有一個數可以與[(p-1)/2]!相乘等於-1,即形如n(p-n) ≡ -1 (mod p)。顯然這個n就是(p-1)/2。

由此可以得到,當(p-1)!模p等於-1時,p必然是質數。

三、應用與代碼示例

威爾遜定理不僅可以用於判斷質數,還可以用於計算排列組合等問題。以下是一個使用威爾遜定理計算組合數的代碼示例:

int P = 998244353;

//快速冪模板
long long qpow(long long a, long long b) {
    long long res = 1 % P;
    while(b) {
        if(b & 1) res = res * a % P;
        a = a * a % P;
        b >>= 1;
    }
    return res;
}

//階乘模板
long long fac(long long x) {
    long long res = 1;
    for(int i = 2; i  n) return 0;
    long long res = fac(n) * inv(fac(m)) % P * inv(fac(n-m)) % P;
    if(n >= P) res = res * qpow(P, n/P) % P;
    return res * fac(n%P) % P * inv(fac(m) * fac(n-m)%P) % P;
}

這個代碼中,我們先定義模數為998244353(一個大質數),然後使用快速冪模板、階乘模板和逆元模板計算階乘和逆元。最後計算組合數時,如果n比較大,我們還需要對模數做一些特殊處理,將計算結果乘上一個指數。

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/241364.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-12 12:31
下一篇 2024-12-12 12:31

相關推薦

  • Python餘弦定理求第三邊長

    本文將從以下幾個方面對Python餘弦定理求第三邊長進行詳細闡述: 一、餘弦定理簡介 餘弦定理是解決三角形問題的基本工具之一,它可以用於求解三角形的邊長和角度。其公式如下: c² …

    編程 2025-04-29
  • Lucas定理的應用與實現

    一、定義與介紹 Lucas定理是組合數學中一個十分重要的定理,它可以用來求解組合數取模運算的值,特別地,它可以幫助我們在取模意義下計算組合數的值。這個定理的發現人是法國數學家Edo…

    編程 2025-04-12
  • Dilworth定理

    一、Dilworth定理簡介 Dilworth定理是一種集合上的基本定理,它描述了一個偏序集合可以被分解為最少的不可分割鏈的數量。這個定理在離散數學、組合數學、計算機科學等多個領域…

    編程 2024-12-30
  • stokes定理的闡述

    一、stokes定理證明 stokes定理,也稱為斯托克斯定理,是矢量分析中的基本定理之一。該定理是從對小曲面上向量場旋度積分的斯托克斯公式推導而來,該公式是從環路定理得出的。歷史…

    編程 2024-12-28
  • 因數個數定理的應用

    一、引言 因數個數定理是數論中的一個重要定理,在許多方面都有廣泛的應用。本文將從多個方面對這個定理做詳細的闡述,包括定理的基本概念、證明方法、推廣應用等。 二、因數個數定理的基本概…

    編程 2024-12-24
  • 斯托克斯定理

    一、斯托克斯定理公式 ∬∂ScurlF·dS = ∫SCF·dl 斯托克斯定理是一個十分重要的定理,它是矢量微積分中的基本定理之一。該定理可以將某一個曲面內的某種物理量的積分值轉化…

    編程 2024-12-22
  • c語言中心極限定理,用c語言求極限

    本文目錄一覽: 1、c語言,隨機產生正態分布,中心值為2,sigma為0.4 2、大爺大媽都能看懂的中心極限定理證明 3、出道題消遣一下 4、概率論與數理統計 第五章 大數定律及中…

    編程 2024-12-22
  • 除余定理c語言,帶余除法c語言編程

    本文目錄一覽: 1、C語言怎麼求餘數 2、C語言取余的原理是怎麼回事?比如31%21=10 這個值是什麼得到的? 3、C語言取余的原理是怎麼回事? 比如 int X,Y X-X/Y…

    編程 2024-12-13
  • 盧卡斯定理的詳細闡述

    一、盧卡斯定理基礎概念 盧卡斯定理是一種經典的數論定理,用於將一個大數的模取余轉化為多個小數的模取余,進而簡化問題的求解。 設n、m是兩個正整數,且p是一個質數,則該定理表述為: …

    編程 2024-12-12
  • Polya定理——從多個角度闡述多項式置換群的應用

    一、多項式置換群簡介 在討論Polya定理之前,我們先來了解一下多項式置換群的基本概念。多項式置換群是由一組多項式組成的置換群,稱為Burnside環或不變環多項式環。這些多項式描…

    編程 2024-12-05

發表回復

登錄後才能評論