線性篩和素性測試

2021-07-24 22:47:03 字數 1641 閱讀 9142

//線性篩求素數表

#include

using

namespace

std;

typedef

long

long ll;

const

int n = 1000010;

int f[n], prime[n];

int table()

}return k;

}int main()

miller-rabin素性測試:用來測試大素數,主要依據是費馬小定理和二次檢測定理,不做證明

//費馬小定理:假設a是乙個整數,p是乙個素數,那麼a^(p-1) ≡ 1(mod p) (0 < a < p) (費馬小定理是判斷素數的必要條件)

//二次探測定理:假設p是乙個素數,且0#include

using

namespace

std;

typedef

long

long ll;

const ll n = 1010;

ll fast_pow(ll a, ll n, ll p)

return res;

}//miller-rabin檢測的正確概率不依賴被檢測數a,而僅依賴於檢測次數,k次檢測後得到錯誤結果的概率為(1/4)^k

bool miller_rabin(ll n, ll num) //num

return

true;

}int main()

return

0;}

2017/4/15.最近看了演算法導論關於數論的在章節,對miller_rabin加深了理解,按照演算法導論上的偽**實現了一下,跟之前的版本稍微有些不同。對於ap

−1≡1

(mod

p),有p−

1=2t

u ,其中t≥

1且u 為奇數,先計算出au

,然後對結果連續平方t次計算ap

−1mo

dp

//費馬小定理:假設a是乙個整數,p是乙個素數,那麼a^(p-1) ≡ 1(mod p) (0 < a < p) (費馬小定理是判斷素數的必要條件)

//二次探測定理:假設p是乙個素數,且0#include

using

namespace

std;

typedef

long

long ll;

const ll n = 1010;

ll mod_mul(ll a, ll n, ll p)//之所以寫這個函式,是為了防止類似a*a%p中a*a溢位

return res;

}ll mod_pow(ll a, ll n, ll p)

return res;

}//miller-rabin檢測的正確概率不依賴被檢測數a,而僅依賴於檢測次數,k次檢測後得到錯誤結果的概率為(1/4)^k

bool miller_rabin(ll p, int num) //num

if(a != 1) return

false;

}return

true;

}int main()

return

0;}

素數篩和線性篩

素數篩就是標記所求範圍內的數字是否是合數 沒有被標記的為合數 具體步驟 用乙個陣列 a i 標記 i 是否是合數,是 a i 為 1 否則 a i 為 0 若 i 為素數則在所求範圍內的 i 的整數倍 a k i 全標記為 1 如 第一次標記到 2 為素數,則 2 的整數倍 4,6,8 均標記為合數...

Miller Rabin素性測試

博主鏈結 隨機素數測試 偽素數原理 call bool res miller n 快速測試n是否滿 足素數的 必要 條件,出錯概率極低 對於任意奇數n 2和正整數s,演算法出錯概率 2 s include include define ll long long int define met a me...

線性篩 區間篩

求l到r之間的素數1 l 231 1 1 leq l 1 l231 1由於範圍過大只需要求得r 2 sqrt 2 2r 線性篩素數時間複雜度o n int n,m int prime 100000 vis 100005 void primes int n for int j 1 j m j 區間篩素...