Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

ตรวจสอบจำนวนเฉพาะ (Prime Number) ใน Python

จำนวนเฉพาะคือจำนวนเต็มบวกที่มากกว่า 1 และไม่มีตัวหารอื่นนอกจาก 1 และตัวมันเอง

วิธีที่ 1: Naive Trial Division (เข้าใจง่าย)

def is_prime_naive(n):
    if n <= 1:
        return False
    for i in range(2, n):
        if n % i == 0:
            return False
    return True

print(is_prime_naive(23))  # True
print(is_prime_naive(25))  # False

วิธีที่ 2: Optimized Trial Division (เร็วกว่า)

  • เช็ค 2 และ 3 ก่อน
  • ข้ามตัวเลขคู่ และตัวเลขหาร 3 ลงตัว
  • เช็คเฉพาะรูปแบบ 6k ± 1 จนถึง √n
def is_prime_optimized(n):
    if n <= 1:
        return False
    if n <= 3:
        return True
    if n % 2 == 0 or n % 3 == 0:
        return False
    i = 5
    while i * i <= n:
        if n % i == 0 or n % (i + 2) == 0:
            return False
        i += 6
    return True

print(is_prime_optimized(31))  # True
print(is_prime_optimized(25))  # False

วิธีที่ 3: ใช้ sympy (สำหรับงานจริง)

import sympy
print(sympy.isprime(10**9 + 7))  # True

เปรียบเทียบประสิทธิภาพ

วิธีTime Complexityเหมาะสำหรับ
NaiveO(n)n เล็ก, การศึกษา
Optimized 6k±1O(√n)ทั่วไป, สัมภาษณ์
Miller-Rabin (sympy)O(k log³ n)จำนวนใหญ่, คริปโต

สรุป

ใช้ optimized trial division สำหรับจำนวนปานกลาง ใช้ sympy สำหรับจำนวนใหญ่มาก