Miller-Rabin Primality Test
อัลกอริทึมทดสอบจำนวนเฉพาะแบบ Probabilistic เร็ว กำหนดได้ว่า Composite (ไม่ใช่เฉพาะ) แน่นอน หรือ Probably Prime (อาจเป็นเฉพาะ)
พื้นฐานทฤษฎี
ขยายจาก Fermat's Little Theorem: ถ้า n เป็นเฉพาะ, aⁿ⁻¹ ≡ 1 (mod n) สำหรับทุก a ที่ gcd(a,n)=1
เขียน n-1 = m × 2ᵏ (m คี่) → ตรวจสอบลำดับ:
aᵐ, a²ᵐ, a⁴ᵐ, ..., a²ᵏ⁻¹ᵐ, a²ᵏᵐ = aⁿ⁻¹ (mod n)
ขั้นตอนอัลกอริทึม (Pseudocode)
MillerRabin(n, a):
// n: จำนวนที่ต้องการทดสอบ, a: base (witness)
หา m, k: n-1 = m × 2ᵏ (m คี่)
T = aᵐ mod n
ถ้า T ≡ ±1 (mod n): return "Probably Prime"
สำหรับ i = 1 ถึง k-1:
T = T² mod n
ถ้า T ≡ 1: return "Composite" // Non-trivial square root of 1
ถ้า T ≡ -1: return "Probably Prime"
return "Composite"ความน่าจะเป็นความผิดพลาด
- 1 รอบ: ≤ 1/4 (25%) โอกาสที่ Composite ผ่าน (Strong Liar)
- m รอบ (Base ต่างกัน): ≤ (1/4)ᵐ
- เช่น 40 รอบ → (1/4)⁴⁰ ≈ 2⁻⁸⁰ (ปลอดภัยทางปฏิบัติ)
ตัวอย่าง: ทดสอบ n=341, base a=2
- 341-1 = 340 = 85 × 2² → m=85, k=2
- T = 2⁸⁵ mod 341 = 8
- T ≠ ±1 → Loop
- i=1: T = 8² mod 341 = 64 mod 341 = 64
- 64 ≠ ±1 → Loop จบ (k-1=1)
- Return "Composite" → 341 = 11 × 31 ✓
Deterministic Variants
- สำหรับ n < 2⁶⁴: ทดสอบ Base = {2, 3, 5, 7, 11, 13, 17} → Deterministic 100%
- ใช้ใน OpenSSL, GnuTLS, Java, .NET, Go, Python (secrets, cryptography)
ข้อดี
- เร็วมาก (O(k log³ n) ด้วย Fast Multiplication)
- ไม่มี Carmichael Number ปัญหา (ต่างจาก Fermat Test)
- มาตรฐานอุตสาหกรรมสำหรับ RSA Key Generation