檢驗大素數 公尺勒隨機測試

2021-09-25 04:57:24 字數 907 閱讀 9065

miller_rabin:概率演算法,能處理10^19範圍數 

#include#include#include#include#include#includeusing namespace std;

const int s=20;//隨機演算法判定次數,s越大,判錯概率越小

//計算 (a*b)%c. a,b都是long long的數,直接相乘可能溢位的

// a,b,c <2^63

long long mult_mod(long long a,long long b,long long c)

a<<=1;

if(a>=c)a%=c;

b>>=1;

}return ret;

}//計算 x^n %c

long long pow_mod(long long x,long long n,long long mod)//x^n%c

return ret;

}//以a為基,n-1=x*2^t a^(n-1)=1(mod n) 驗證n是不是合數

//一定是合數返回true,不一定返回false

bool check(long long a,long long n,long long x,long long t)

if(ret!=1) return true;

return false;

}// miller_rabin()演算法素數判定

//是素數返回true.(可能是偽素數,但概率極小)

//合數返回false;

bool miller_rabin(long long n)

for(int i=0;ireturn true;

}int main()

return 0;

}

大素數的檢驗

費馬小定理 a p 1 mod p 1 p是素數 a0 首先我們證明這樣乙個結論 如果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是素數,則a p 1 p 1,加上二次探測定理 如果p是乙個素數,則x 2 p 1的解為,則x 1或者x n 1。一次檢測中 主要是把乙個數n的n 1分解成d 2 r的形式,其中d為奇數,正向過程是a n p如果是1,就繼續分解 a n 2 p,a為乙個與n互素的數 看是否為...

公尺勒拉賓素數檢測

是一種隨機化素數檢測演算法 基於下面的定理 費馬小定理的逆命題 如果 a equiv 1 bmod p 成立,那麼 p 是乙個素數且 a 不是 p 的倍數 可以確定費馬小定理的逆命題不一定成立。那麼對於乙個數,如果不滿足 a equiv 1 bmod p 那麼一定不是素數,如果滿足,那麼有可能是素數...