LOJ 143 質數判定

2022-06-13 14:24:10 字數 966 閱讀 7599

給定乙個數 \(n\),判斷是否是質數。

\(n\leq 10^\)。

miller–rabin 素數測試板子題。推薦部落格。

質數有兩個性質。一是眾所周知的費馬小定理:若 \(p\) 是質數,且 \(x\) 不是 \(p\) 的倍數,則

\[x^\equiv 1\pmod p

\]還有乙個二次探測定理。如果 \(p\) 是質數且 \(x^2\equiv 1\pmod p\),那麼 \(x\equiv1\pmod p\) 或 \(x\equiv p-1\pmod p\)。

證明直接把 \(1\) 移項平方差即可。

所以對於乙個要測試的數 \(p\),我們取乙個數 \(a\),先判斷 \(a^\bmod p\) 是否等於 \(1\)。如果不是那麼顯然 \(p\) 是合數。

接下來重複此操作:

如果 \(p-1\) 是奇數則直接退出迴圈。

計算 \(a^}\bmod p\),根據二次探測定理,如果答案不是 \(1\) 或 \(n\) 則 \(p\) 是合數。

如果答案是 \(1\) 則取 \(p'=\frac\) 繼續探測。

隨機選 \(a\) 的話,miller–rabin 有 \(\frac\) 的概率出錯。所以如果測試 \(k\) 次,測試錯誤的概率就降至 \(\frac\)。

在資料範圍不同時 \(a\) 的選取可以參考 wiki。

#include using namespace std;

typedef long double ld;

typedef long long ll;

const int prm[10]=;

ll n;

ll fmul(ll x,ll y,ll mod)

ll fpow(ll x,ll k,ll mod)

bool mr(ll n)

return 1;

}int main()

LOJ 143 質數判定 題解

csdn同步 原題鏈結 簡要題意 給定 t 個數 n 判素數。t leq 10 5 n leq 10 可能你判乙個都有困難是不是 cdots cdots 若 x 2 equiv 1 pmod p x p 則 x 1 或 x p 1 簡單證明 x 2 equiv 1 pmod p x 1 x 1 eq...

數學知識 質數(質數的判定 分解質因數 篩質數)

在大於1的整數中,如果只包含1和她本身這兩個約數,那麼這個整數被稱為質數。給定n個正整數ai,判定每個數是否是質數。輸入格式 第一行包含整數n。接下來n行,每行包含乙個正整數ai。輸出格式 共n行,其中第 i 行輸出第 i 個正整數ai是否為質數,是則輸出 yes 否則輸出 no 資料範圍 1 n ...

Miller Rabin隨機法判定大質數

在測試一些非常大的數時,如果用根號n的方法判斷也會耗掉大量時間,實際上我們有更快的方法 miller rabin隨機法 我們知道,費馬小定理 假如p是質數,且 a,p 1 那麼a p 1 1 mod p 即假如p是質數,且a,p互質,那麼a的 p 1 次方除以p的餘數恆等於1。在大多數情況下費馬小定...