หลักการคือการหารตัวเลขเป้าหมายด้วยทุกจำนวนตั้งแต่ 3 ถึงรากที่สองของมัน หากหารลงตัวตัวใดตัวหนึ่ง แสดงว่าไม่ใช่เลขเฉพาะ เพราะรากที่สองคือตัวประกอบสูงสุดที่เป็นไปได้
การทำงานของอัลกอริทึม
- คืน
Falseสำหรับตัวเลขน้อยกว่า 2 - คืน
Falseสำหรับเลขคู่ที่ไม่ใช่ 2 - ตรวจสอบความหารลงตัวด้วยเลขคี่ตั้งแต่ 3 ถึง √n
- ใช้
all()ร่วมกับ generator expression เพื่อประสิทธิภาพ
โค้ดตัวอย่าง
def is_prime(n):
if n < 2:
return False
elif n != 2 and n % 2 == 0:
return False
else:
return all(n % i for i in range(3, int(n**0.5) + 1, 2))
# ทดสอบ
num = int(input('ป้อนตัวเลข: '))
if is_prime(num):
print(f"{num} เป็นเลขเฉพาะ")
else:
print(f"{num} ไม่ใช่เลขเฉพาะ")
ผลลัพธ์ตัวอย่าง
ป้อนตัวเลข: 24 24 ไม่ใช่เลขเฉพาะ ป้อนตัวเลข: 47 47 เป็นเลขเฉพาะ
การปรับปรุงประสิทธิภาพ
- ข้ามเลขคู่ด้วย
range(3, ..., 2) - สำหรับตัวเลขใหญ่มาก ควรใช้ Miller-Rabin primality test
- ใช้
math.isqrt(n)(Python 3.8+) แทนint(n**0.5)เพื่อความแม่นยำ