Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> การเขียนโปรแกรม

อัลกอริทึมของ Miller-Rabin สำหรับการทดสอบความเป็นอันดับหนึ่งของตัวเลขที่ระบุคืออะไร


Miller Rabin เป็นวิธีที่รวดเร็วในการทดสอบความเป็นอันดับหนึ่งของตัวเลขจำนวนมาก อัลกอริธึมนี้เรียกว่าการทดสอบเบื้องต้นของ Rabin-miller และอัลกอริธึมนี้จะตัดสินว่าจำนวนเฉพาะซึ่งเหมือนกับการทดสอบอื่นๆ รวมถึง Fermat primality Test และ Solovay- Strassen primality test

การทดสอบนี้อิงจากความเท่าเทียมกันหรือกลุ่มของความเท่าเทียมกันที่เป็นจริงสำหรับค่าเฉพาะ ดังนั้นตรวจสอบว่ามีค่าเท่ากับจำนวนนั้นหรือไม่ว่าจำเป็นต้องทดสอบหาความเป็นอันดับหนึ่ง

อัลกอริธึมนี้เป็นอัลกอริธึมการทดสอบพื้นฐานที่รู้จักและมีประโยชน์มากที่สุด และสามารถใช้ในไลบรารีซอฟต์แวร์ต่างๆ ที่อิงตามการเข้ารหัส RSA และอินสแตนซ์ที่ดีที่สุดคือ OpenSSL

มิลเลอร์ ราบินตรวจสอบว่าตัวเลขนั้นประกอบกัน นี่จึงเรียกว่าการทดสอบคอมโพสิตมากกว่าการทดสอบเบื้องต้น การทดสอบมิลเลอร์ Rabin ระบุส่วนผสมทั้งหมด สำหรับแต่ละหมายเลขประกอบ n อาจมีอย่างน้อย 3/4 (มิลเลอร์ ราบิน) ของตัวเลข a เป็นพยานถึงการรวมกันของ n

Miller Rabin เป็นส่วนขยายที่เชื่อมโยงอย่างง่ายของทฤษฎีบทเล็กๆ ของ Fermats ที่ช่วยให้เราสามารถทดสอบความเป็นปฐมภูมิโดยมีความน่าจะเป็นมากกว่าทฤษฎีบทเล็กๆ ของ Fermats

อัลกอริทึม :Pseudocode สำหรับการทดสอบ 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"
}

มีอดีตฉัน เป็นข้อพิสูจน์ว่าทุกครั้งที่ตัวเลขผ่านการทดสอบ Miller-Rabin ความน่าจะเป็นที่ไม่ใช่จำนวนเฉพาะคือ ¼ หากตัวเลขผ่าน m การทดสอบ (โดยมีค่า m ต่างกัน) ความน่าจะเป็นที่ไม่ใช่จำนวนเฉพาะคือ (1/4) m .

ตัวอย่าง :ใช้ Miller-Rabin Algorithm โดยใช้ฐาน 2 เพื่อทดสอบว่าตัวเลข 341 นั้นประกอบกันหรือไม่

วิธีแก้ปัญหา :โดยใช้ Miller-Rabin Algorithm เราสามารถทดสอบเลข 341 ได้ดังนี้:

ขั้นที่ 1:341 − 1 =2 2 x 85 ดังนั้น p =341, k =2 และ q =85

ขั้นที่ 2:x =2 (ระบุ)

ขั้นที่ 3:S =x q mod p

=2 85 mod 341 =(2 10 ) x 2 5 mod 341 8

=2 10 mod 341 x 2 13 mod 341

=1 x 8192 mod 341 =8192 mod 341

=8

ขั้นที่ 4:เมื่อ 8 ≠ 1 เราย้ายไปยังขั้นตอนถัดไป

ขั้นที่ 5:สำหรับ j =1, S =x 2q mod p

=2 170 mod 341 =(2 20 ) 8 x 2 10 mod 341

=2 20 mod 341 x 2 8 mod 341 x 2 10 mod 341

=1 x 256 x 1 =256

ตอนนี้ =256 ≠ 1

และผลลัพธ์ยังสรุปไม่ได้

ดังนั้น 341 ไม่ใช่จำนวนเชิงประกอบ

ข้อดี

  • อัลกอริธึมนี้สามารถใช้ในการทดสอบตัวเลขสูงสำหรับความเป็นปฐมวัยได้

  • เนื่องจากมีความได้เปรียบในด้านความเร็วเมื่อเทียบกับการทดสอบในขั้นต้น การทดสอบ Miller Rabin จะเป็นการทดสอบทางเลือกสำหรับแอพพลิเคชั่นการเข้ารหัสหลายตัว

  • เมื่อเปรียบเทียบกับการทดสอบออยเลอร์และโซโลเวย์-สตราสเซน มิลเลอร์ ราบินมีพลวัตมากกว่าและสิ่งสำคัญคือความน่าจะเป็นของความล้มเหลวจะลดลง

  • จากการทดสอบ Fermat มีผู้โกหกมากเกินไปสำหรับ Carmichaelnumbers n ทั้งหมด ความน่าจะเป็นของข้อผิดพลาดนั้นใกล้จะถึง 1 ข้อเสียนี้สามารถป้องกันได้ในMiller Rabin