กลับไปยังโจทย์
ง่าย 0 ข้อที่แก้แล้ว อัตราผ่าน 0%

ตรวจสอบจำนวนเฉพาะ

ตัดสินว่าตัวเลขเป็นจำนวนเฉพาะหรือไม่

สิ่งที่คุณจะได้เรียนรู้

  • ตรวจการหารลงตัวด้วยตัวดำเนินการ %
  • หยุดตรวจที่รากที่สองของ n
  • ถือว่า 0, 1 และ 2 เป็นกรณีพิเศษ

โจทย์

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

ให้เขียนฟังก์ชัน is_prime(n)

อินพุต

n: ตัวเลขที่ต้องการทดสอบ

เอาต์พุต

คืนค่า true หาก n เป็นจำนวนเฉพาะ มิฉะนั้นคืนค่า false

เงื่อนไข

-1,000 ≤ n ≤ 1,000,000,000,000

ตัวอย่าง

ตัวอย่างที่ 1
อินพุต:
n = 29

ผลลัพธ์ที่คาดหวัง:
expected = True
อินพุต:
long long n = 29;

ผลลัพธ์ที่คาดหวัง:
bool expected = true;
อินพุต:
long n = 29;

ผลลัพธ์ที่คาดหวัง:
bool expected = true;

คำอธิบาย

29 ไม่มีตัวหารอื่นนอกจาก 1 และ 29

ตัวอย่างที่ 2
อินพุต:
n = 21

ผลลัพธ์ที่คาดหวัง:
expected = False
อินพุต:
long long n = 21;

ผลลัพธ์ที่คาดหวัง:
bool expected = false;
อินพุต:
long n = 21;

ผลลัพธ์ที่คาดหวัง:
bool expected = false;

คำอธิบาย

21 = 3 × 7 ดังนั้นจึงไม่ใช่จำนวนเฉพาะ

แนวทางการแก้

ลองทำเองก่อน แล้วค่อยเปิดคำใบ้ทีละข้อ

คำใบ้ 1

จัดการตัวเลขที่น้อยกว่า 2 ก่อน เพราะไม่เป็นจำนวนเฉพาะ

คำใบ้ 2

ทดสอบตัวหารที่เป็นไปได้ถึงแค่รากที่สองของตัวเลข

คำใบ้ 3

ระวังเลขคู่และตัวประกอบซ้ำ เพราะมีตัวหารตัวเดียวก็พอให้ตัดว่ามิใช่จำนวนเฉพาะ

ความซับซ้อนที่คาดหวัง

เวลา O(sqrt(n)), หน่วยความจำเพิ่ม O(1)

แหล่งอ้างอิง

โจทย์นี้ปรับให้เหมาะกับ CodeUtility กรุณาทำตามคำชี้แจงและข้อจำกัดด้านบน

เรียนรู้จากคนอื่น

แนวทางจากชุมชน

ยังไม่มีวิธีทำที่เผยแพร่ ลองแก้โจทย์นี้เพื่อแชร์วิธีแรก