什麼是用於測試給定數字素數性的米勒-拉賓演算法?


米勒-拉賓是一種快速測試大數素數性的方法。該演算法被稱為拉賓-米勒素性檢驗,它決定一個數是否為素數,這與其他檢驗相同,包括費馬素性檢驗和索洛維-施特拉森素性檢驗。

此測試基於對素數值成立的等式或等式組,因此檢查它們是否對需要測試素數性的數字成立。

該演算法是最有用的已知素性測試演算法,可用於基於 RSA 加密的不同軟體庫,最好的例子是 OpenSSL。

米勒-拉賓驗證該數字是合數。因此,這被稱為合數檢驗而不是素數檢驗。米勒-拉賓檢驗識別所有合數。對於每個合數 n,至少有 3/4(米勒-拉賓)的數字 a 是 n 的合數的見證。

米勒-拉賓是費馬小定理的簡單擴充套件,它使我們能夠以比費馬小定理更大的機率測試素數性。

演算法:米勒-拉賓檢驗的虛擬碼 -

Miller-Rabin-Test (n, a) // n is the number; a is the base{
   Find m and k such that n − 1 = m x 2k
   T ← amod n
   If (T = ±1)return "a prime"
   for (i ← 1 to k − 1) // k – 1 is the maximum number of steps{
      T ← T2 mod n
      if (T = ±1) return "a composite"
      if (T = −1) return "a prime"
   }
   return "a composite"
}

存在一個證明,每次一個數字透過米勒-拉賓檢驗時,它不是素數的機率為 1/4。如果該數字透過 m 次檢驗(使用 m 個不同的傳遞),則它不是素數的機率為 (1/4)m

示例:使用基數 2 應用米勒-拉賓演算法來測試數字 341 是否為合數。

解決方案:使用米勒-拉賓演算法,我們可以如下測試數字 341 -

步驟 1:341 - 1 = 22 x 85。因此 p = 341,k = 2 且 q = 85

步驟 2:x = 2(給定)

步驟 3:S = xq mod p

         = 285 mod 341 = (210) x 25 mod 341 8

         = 210 mod 341 x 213 mod 341

         = 1 x 8192 mod 341 = 8192 mod 341

         = 8

步驟 4:由於 8 ≠ 1,我們轉到下一步。

步驟 5:對於 j = 1,S = x2q mod p

         = 2170 mod 341 = (220)8 x 210 mod 341

         = 220 mod 341 x 28 mod 341 x 210 mod 341

         = 1 x 256 x 1 = 256

現在,= 256 ≠ 1

結果不確定

因此,341 不是合數。

優點

  • 此演算法可用於測試高數字的素數性。

  • 由於與其他素數檢驗相比速度更快,因此米勒-拉賓檢驗將成為多種密碼學應用的首選檢驗。

  • 與尤拉和索洛維-施特拉森檢驗相比,米勒-拉賓更具動態性,並且其基本方面是降低了失敗的機率。

  • 根據費馬檢驗,對於所有卡邁克爾數 n,存在太多說謊者,錯誤機率接近 1,米勒-拉賓避免了此缺點。

更新於: 2022 年 3 月 16 日

9K+ 次檢視

開啟你的 職業生涯

透過完成課程獲得認證

開始
廣告