Computer >> 컴퓨터 >  >> 프로그램 작성 >> 프로그램 작성

주어진 숫자의 소수를 테스트하기 위한 Miller-Rabin 알고리즘은 무엇입니까?

<시간/>

Miller Rabin은 큰 수의 소수를 테스트하는 빠른 접근 방식입니다. 이 알고리즘을 Rabin-miller 소수성 검정이라고 하며, 이 알고리즘은 숫자가 소수인지 여부를 판별하여 Fermat 소수성 검정 및 Solovay-Strassen 소수성 검정을 비롯한 다른 검정과 동일합니다.

이 테스트는 소수 값에 대해 true를 유지하는 같음 또는 같음 그룹을 기반으로 하므로 소수 테스트에 필요한 숫자인지 여부를 확인합니다.

이 알고리즘은 알려진 가장 유용한 소수 테스트 알고리즘이며 RSA 암호화를 기반으로 하는 다양한 소프트웨어 라이브러리에서 사용할 수 있으며 최상의 인스턴스는 OpenSSL입니다.

Miller Rabin은 숫자가 합성임을 확인합니다. 그래서 이것을 소수성 테스트라기보다는 합성성 테스트라고 합니다. Miller Rabin 테스트는 모든 복합 재료를 식별합니다. 각 합성 수 n에 대해 숫자 a의 최소 3/4(Miller Rabin)이 있을 수 있습니다.

Miller Rabin은 Fermats little theorem보다 훨씬 더 큰 확률로 소수를 테스트할 수 있게 해주는 Fermats little theorem의 연관 단순 확장입니다.

알고리즘 :Miller-Rabin 테스트를 위한 의사 코드 -

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"
}

거기 exi sts는 숫자가 Miller-Rabin 테스트를 통과할 때마다 소수가 아닐 확률이 1/4임을 증명합니다. 숫자가 m개의 테스트(m개의 다른 통과 포함)를 통과하면 소수가 아닐 확률은 (1/4) m 입니다. .

:2진법을 사용하여 Miller-Rabin 알고리즘을 적용하여 숫자 341이 합성인지 여부를 테스트합니다.

해결책 :Miller-Rabin 알고리즘을 사용하여 다음과 같이 숫자 341을 테스트할 수 있습니다.

1단계:341 − 1 =2 2 x 85. 따라서 p =341, k =2 및 q =85

2단계:x =2(주어진)

3단계:S =x q 모드 p

=2 85 모드 341 =(2 10 ) x 2 5 모드 341 8

=2 10 모드 341 x 2 13 모드 341

=1 x 8192 모드 341 =8192 모드 341

=8

4단계:8 ≠ 1로 다음 단계로 이동합니다.

5단계:j =1, S =x 2q 의 경우 모드 p

=2 170 모드 341 =(2 20 ) 8 x 2 10 모드 341

=2 20 모드 341 x 2 8 모드 341 x 2 10 모드 341

=1 x 256 x 1 =256

이제 =256 ≠ 1

결과가 불확실함

따라서 341은 합성 숫자가 아닙니다.

장점

  • 이 알고리즘은 소수에 대해 높은 숫자를 테스트하는 데 사용할 수 있습니다.

  • 다른 소수 테스트와 비교할 때 속도 면에서 이점이 있기 때문에 Miller Rabin 테스트는 여러 암호화 응용 프로그램에서 선택 테스트가 될 것입니다.

  • 오일러 및 솔로베이-스트라센 테스트와 비교할 때 Miller Rabin은 더 역동적이고 본질적인 측면은 실패 확률이 감소한다는 것입니다.

  • 페르마 테스트에 따르면 모든 Carmichaelnumbers n에 대해 너무 많은 거짓말쟁이가 있으며 오류 확률은 1에 가깝고 이러한 단점은 Miller Rabin에서 방지됩니다.