素數判定的一些討論(Miller Rabin演算法)

2021-07-22 09:28:45 字數 1334 閱讀 5302

很久沒有寫部落格了。。。最近軍訓加開學,感覺刷題速度有降低,要補一補。

回歸正題,正式進入數論階段,討論一下關於素數判定的那些事。

直接根據素數的定義列舉

i 從2到

(n−1

) ,如果n%i==0

n 為合數。

時間複雜度:o(

n)

bool is_prime(int n)
發現若存在

i<

n 使得n%i==0,則必有n%(n/i)==0

所以只需列舉

i 從2到

sqrt

(n) 即可。

時間複雜度:o(

n√)

bool is_prime(int n) 

) 的形式,然後令x[

0]=a

umodp,

,那麼將x[

0]平方

t 次就是(a

u)2t

modp

的值,我們設x[

i]為x[0

] 平方

i 次的值,根據二次探測定理,若x[

i]等於1,則x[

i−1]

等於1或p-1,不滿足則

p 為合數。

注意以上操作中所有的形如ab

modp

的式子都要用快速冪運算,當n比較大時,形如a×

bmod

p 的式子也要使用分治的思想來計算。

這就是miller-rabin演算法的主要內容。

時間複雜度:考慮常數後為o(

slog

3n)

**如下:

const

int maxn = 65;

long

long n, x[maxn];

long

long multi(long

long a, long

long b, long

long p)

return ans;

}long

long qpow(long

long a, long

long b, long

long p)

return ans;

}bool miller_rabin(long

long n)

while(s--)

if(x[t] != 1) return

false;

}return

true;

}

素數判定的一些討論(Miller Rabin演算法)

一類問題 判定乙個整數n n 1 是否為素數。演算法一 直接根據素數的定義列舉從到,如果n i 0n為合數。時間複雜度 o n int is prime int n 演算法二 發現若存在使得n i 0,則必有n n i 0。所以只需列舉從到即可。時間複雜度 int is prime int n 如果...

關於Session的一些討論

眾所周知,session是jsp的九大內建物件之一,也是伺服器二次識別客戶端的橋梁,它的生命週期非常長,一般都是存在於乙個會話 同一瀏覽器 之中,與 天地同壽 伺服器 有如下例子 1 在不關閉瀏覽器的情況下,建立乙個session,你始終可以訪問到這個session。2 在不關閉瀏覽器的情況下,建立...

關於素數的一些題目

看了czyuan的總結,決定先找幾道素數的題目玩玩.首先,判定素數的方法除了暴力列舉到根號n外還有篩法,不要小看,他可以演變出一些題目 for i 2 i maxn i 短短幾行,可以在0.9s左右篩出一千萬內的素數,應該夠用了 這個題 是篩素數的好題,當然要先知道威爾遜定理.不知道的話搜一下吧.這...