ภาพรวม
ลำดับ Collatz เริ่มจากจำนวนเต็มบวก n:
- ถ้า n คู่ → n = n/2
- ถ้า n คี่ → n = 3n + 1
- ทำซ้ำจน n = 1
โจทย์หาความยาวของลำดับ (รวม n เริ่มต้นและ 1 สุดท้าย)
ตัวอย่าง n=13
ลำดับ: 13, 40, 20, 10, 5, 16, 8, 4, 2, 1 → ความยาว 10
โค้ด Python
class Solution:
def solve(self, num):
if num == 0:
return 0
length = 1
while num != 1:
num = (num // 2) if num % 2 == 0 else (3 * num + 1)
length += 1
return length
ob = Solution()
print(ob.solve(13))
หมายเหตุสำคัญ
- ใช้
//(integer division) แทน/เพื่อให้ได้ int - Collatz conjecture: เชื่อว่าลำดับจะถึง 1 สำหรับทุก n > 0 (ยังไม่พิสูจน์)
- เวลาไม่แน่นอน ขึ้นอยู่กับ n
ผลลัพธ์
10