โจทย์
จำนวนเฉพาะ (prime) คือจำนวนเต็มที่มากกว่า 1 และไม่มีตัวหารบวกอื่นใดนอกจาก 1 และตัวมันเอง จงหาตัวประกอบเฉพาะที่มากที่สุดของ n หาก n เป็นจำนวนเฉพาะ ให้คืนค่า n
ให้เขียนฟังก์ชัน largest_prime_factor(n)
อินพุต
n: จำนวนเต็มที่ต้องการแยกตัวประกอบ
เอาต์พุต
คืนค่าตัวประกอบเฉพาะที่มากที่สุดของ n
เงื่อนไข
2 ≤ n ≤ 10¹² อินพุต 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
อินพุต:
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 กรุณาทำตามคำชี้แจงและข้อจำกัดด้านบน