在好久之後終於搞完了miller-
rabbin素性測試,談談自己的理解
要判斷的數設為 a,
主要思想就是運用費馬小定理來搞,隨機幾個數x(x<=a-1),判斷x^(a-1)=1(mod a)是否成立,如果有不成立,a肯定不是素數
這是有一定錯誤機率的,隨機n個數的錯誤機率為4^(-n)
這麼看來,肯定是多來幾組隨機數比較保險,10比較穩
期間加入了二次探測定理,以提高miller-rabbin的效率
二次探測定理:若p是奇素數 x^2=1 (mod p) x的解一定為 1或p-1
如果不滿足此定理,一樣是合數
code
1 #include2 #include3 #include4 #include5 #include6 #include7 #include8 #include9 #include10view code#define ll long long
11#define inf 2147483647
12#define n 10
13using
namespace
std;
1415
ll quick_mul(ll a, ll b, ll n)
22return
res;23}
2425
ll quick_pow(ll a, ll b, ll n)
32return
res;33}
34bool
miller_rabin(ll x)//
這麼做是為了順便加上二次探測定理
3940 srand((ll)time(0
));41
for(int i=1;i<=n;i++)
51if(t!=1)return0;
52}53return1;
5455}56
5758
intmain()
66 printf("%d"
,cnt);
67return0;
68 }
素數的Miller Rabbin測試
引理 如果p是乙個素數的話,那麼對任意乙個小於p的正整數a,a,2a,3a,p 1 a除以p的餘數正好是乙個1到p 1的排列。例如,5是素數,3,6,9,12除以5的餘數分別為3,1,4,2,正好就是1到4這四個數。證明 反證法 假如結論不成立的話,那麼就是說有兩個小於p的正整數m和n使得na和ma...
Miller Rabbin素數測試
miller rabbin 素數測試可以判斷比較大的數是不是素數。但是判斷的結果可能是偽素數。費馬小定理 若p為素數是,滿足 a equiv 1 mod p 二次探測定理 若p為奇素數且 x 2 equiv 1 mod p 則x equiv 1 mod p 或者 x equiv p 1 mod p ...
關於this 的使用
如有不對的地方請大家指出,呵呵.this 的使用 1.this是指當前物件自己。當在乙個類中要明確指出使用物件自己的的變數或函式時就應該加上this引用。如下面這個例子中 public class a public static void main string args 執行結果 s hellow...