前面我們講了判斷素數的方法(複雜度o(√n)),但是它太慢了,所以我們要有一種更快的判斷方法。
好像似乎沒有在保證正確率的情況下更快的了.......
那就把正確率吃掉好了。
~~很久很久以前,素數突然出現,帶來題目帶走題解又消失不見~~判斷十分危險,複雜度誰最短~~
當然是miller rabin辣!!!
某個神奇的定理:
蒟蒻證明湊合著看233
雖然它的逆定理不一定成立,但是我們可以多找幾個a帶進去試試嗎。如果很多個a都滿足的話,那n就很有可能是素數了。選幾個a呢?8~10個就夠了。a選什麼呢?幾個小的素數就夠了。
輸入格式:
乙個數n
輸出格式:
如果可以,輸出yes
如果不行,輸出no
輸入樣例:
輸出樣例:
no**如下:
#include#include#include
#include
using
namespace
std;
long
long gg[12]=,n;
int kuaisumi(long
long a,int b,int
n)
return
ans;
} bool miller_rabin(int a,int
b)
int x=kuaisumi(a,d,n);
if(x==1)return
true
;
for(int i=0;i<=r;i++)
return
false;}
bool is_prime(int
n)int
main()
函式之判斷素數
寫乙個判斷素數的函式,在主函式輸入乙個整數,輸出是否是素數的訊息。乙個數如果是素數輸出prime 如果不是輸出 素數是只能被1和它本身整除的一類特殊的數,所以,要編寫乙個程式尋找這類數,如果乙個數還能被其他的數整除,就不符合要求 輸入的資料預設為素數,所以定義乙個變數為真 int p 1 檢查時只檢...
數學(反素數)
定義 對於任何正整數n,其約數個數記為f n 例如f 6 4 如果存在乙個正整數n滿足 對於任意的正整數x 0乙個反素數的所有質因子必然是從2開始的若干個質數,因為乙個數是反素數,說明在跟它約數相同的數中,它是最小的。如果n 2t1 3t2 5t3 那麼一定有t1 t2 t3 t4.另外易知如果n ...
利用孿生素數判斷素數
思路參見 孿生素數 所謂孿生素數指的是間隔為 2 的相鄰素數。大於6以上的孿生素數,p 1和p 1為素數,則p 1和p 1一定為奇數,則p一定為偶數,即p為2的倍數 p 1 p p 1為連續的自然數,他們一定有乙個是3的倍數,p 1和p 1為素數,則他們不為3的倍數,即p也為3的倍數 所以p一定為2...