//線性篩求素數表
#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 區間篩素...