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

ตัวประกอบเฉพาะที่มากที่สุด

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

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

  • หารตัวประกอบออกจากเล็กไปใหญ่
  • หยุดที่รากที่สองของส่วนที่เหลือ
  • จัดการตัวเลขขนาดใหญ่อย่างมีประสิทธิภาพ

โจทย์

จำนวนเฉพาะ (prime) คือจำนวนเต็มที่มากกว่า 1 และไม่มีตัวหารบวกอื่นใดนอกจาก 1 และตัวมันเอง จงหาตัวประกอบเฉพาะที่มากที่สุดของ n หาก n เป็นจำนวนเฉพาะ ให้คืนค่า n

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

อินพุต

n: จำนวนเต็มที่ต้องการแยกตัวประกอบ

เอาต์พุต

คืนค่าตัวประกอบเฉพาะที่มากที่สุดของ n

เงื่อนไข

2 ≤ n ≤ 10¹² อินพุต 1 จะไม่ถูกใช้เพราะไม่มีตัวประกอบเฉพาะ

ตัวอย่าง

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

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

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

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

คำอธิบาย

84 = 2 × 2 × 3 × 7 ดังนั้นตัวประกอบเฉพาะที่มากที่สุดคือ 7

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

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

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

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

คำอธิบาย

13 เป็นจำนวนเฉพาะ ดังนั้นตัวประกอบเฉพาะที่มากที่สุดก็คือ 13

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

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

คำใบ้ 1

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

คำใบ้ 2

ลองหารเฉพาะตัวหารถึงแค่รากที่สองของเศษที่เหลือปัจจุบัน และหารซ้ำจนกว่าจะไม่ลงตัว

คำใบ้ 3

ถ้าเศษที่เหลือยังมากกว่า 1 หลังเช็กตัวประกอบเล็กๆ แล้ว เศษนั้นเป็นจำนวนเฉพาะและเป็นตัวประกอบที่ใหญ่ที่สุด

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

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

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

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

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

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

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