求素數的高效實現

2022-09-13 13:51:14 字數 1095 閱讀 7352

對於給定的乙個數n,如何判斷其是否是素數呢?

最簡單最直觀的方法是試除法(下面的演算法1、2、3),還有一種方法是rabin-miller演算法。

from 2 to n思路:從2到n-1,做取模運算n mod ( i ),若運算結果均為 0 ,則 n 為素數

實現:

public

boolean isprimenumber(int

n)

return

true

;}

from 2 to n½

實現:

public

boolean isprimenumber(int

n)

from prime[min] to prime[max]思路:將 n½ 之前的所有素數存到陣列,在該素數陣列內迴圈

實現:

class

solution

}

rabin-miller演算法思路:判斷 n 是否為素數,首先要確保 n 是奇數。另外已知奇數總能寫成 n = (2^r)*s+1,其中 s 也是奇數。rabin-miller演算法是一種概率素數檢測演算法,該演算法認為:只要奇數 n 能夠滿足①或者②(通過rabin-miller測試),那麼他就是乙個素數。【但事實是,有些合數也能通過rabin-miller測試,所以在實踐時,往往會多做幾次測試,也就是換個 a 多做幾次①和②,如果每次都能通過測試,那麼就說 n 是個素數,且正確率極高】驗算①:取隨機整數 a ,a的取值範圍是[1,n-1],a^s = 1 mod n

驗算②:取隨機整數 a ,a^s((2^j)*s) = -1 mod n ,其中0≤j

實現:(未驗證)

//

n是待測數字,s設定rabin-miller測試次數

public

boolean isprime(int n, int

s)

return

true;}

//一次rabin-miller測試實現

public

boolean rabinmiller(int a,int

n)

return d!=1;

}

演算法 高效求素數

質數又稱素數。指在乙個大於1的自然數中,除了1和此整數自身外,不能被其他自然數整除的數。1不是素數。乙個非素數可以由幾個素數因子相乘得到,這些因子一定小於這個數的開方,因此可通過這個性質求素數 void slow int n if flag cout cout 但這種演算法效率低,複雜度為o n s...

求素數 Python實現

用filter求素數 計算素數的乙個方法是埃氏篩法,它的演算法理解起來非常簡單 首先,列出從2開始的所有自然數,構造乙個序列 2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,取序列的第乙個數2,它一定是素數,然後用2把序列的2的倍數篩掉 3,4,5,...

python 判斷素數以及高效求n以內素數

1 判斷是否是素數 def isprime n if n 1 return false i 2 while i i n if n i 0 return false i 1 return true2 求n以內的素數 class solution defcountprimes self,n 初始所有乙個...