Miller Rabin質數測試

2021-07-22 03:58:48 字數 1355 閱讀 1862

1.費馬小定理:

費馬小定理:對於質數p和任意整數a,a^(p-1) mod=1不滿足的一定是合數,滿足的大概率是素數。

2.miller-rabin質數測試

如果滿足費馬小定理,則進一步驗證如果p是奇素數,則 x^2 ≡ 1(mod p)的解為 x ≡ 1 或 x ≡ p - 1(mod p)

乙個例子:舉個matrix67 blog上的例子,假設n=341,我們選取的a=2。則第一次測試時,2^340 mod

341=1。由於340是偶數,因此我們檢查2^170,得到2^170 mod

341=1,滿足二次探測定理。同時由於170還是偶數,因此我們進一步檢查2^85 mod

341=32。此時不滿足二次探測定理,因此可以判定341不為質數。

將這兩條定理合起來,也就是最常見的miller-rabin測試。

1.對於(a*b)%c這裡的a,b,c都是非常大的數因此會產生爆乘,因此不能將a*b直接運算。

2.對於(a^b%c)這裡可以使用快速冪的思想,將指數變成二進位制,然後二分的思想。

ac**

#include

#include

#include

using

namespace

std;

typedef

long

long ll;

ll multmod(ll a, ll b, ll c)

tmp <<= 1;

if (tmp>c) tmp -= c;

b >>= 1;

}return res;

}ll modpow(ll base, ll exponent, ll modulus)

return result;

}bool miller_rabin(ll n)

if (n % 2 == 0)return

false;

ll u = n - 1;

while (!(u & 1))u = u >> 1;

int s = 1000;//s為測試次數

ll x, y;

for (int i = 1; i <= s; i++)

if (x != 1)return

false;

}return

true;

}int main()

return

0;}

Miller Rabin質數測試

費馬小定理 對於質數p和任意整數a,有a p a mod p 同餘 反之,若滿足a p a mod p p也有很大概率為質數。將兩邊同時約去乙個a,則有a p 1 1 mod p 也即是說 假設我們要測試n是否為質數。我們可以隨機選取乙個數a,然後計算a n 1 mod n,如果結果不為1,我們可以...

Miller Rabin質數測試

這種質數演算法是基於費馬小定理的乙個擴充套件。費馬小定理 對於質數p和任意整數a,有a p a mod p 同餘 反之,若滿足a p a mod p p也有很大概率為質數。將兩邊同時約去乙個a,則有a p 1 1 mod p 也即是說 假設我們要測試n是否為質數。我們可以隨機選取乙個數a,然後計算a...

Miller Rabin質數測試

本文主要討論使用miller rabin演算法編寫素數的判定演算法,題目 於hihocoder。時間限制 10000ms 單點時限 1000ms 記憶體限制 256mb 描述 使用miller rabin演算法進行質數素數測試,要求輸入乙個數字,對其是否是素數進行判定,並列印出相對應的結果。輸入 第...