Xác định hàm f (n) cho số nguyên dương n như sau:
- n / 2 , nếu n chẵn
- 3 * n + 1 , nếu n là số lẻ
Nếu bạn liên tục áp dụng hàm này cho bất kỳ n lớn hơn 0, kết quả dường như luôn hội tụ thành 1 (mặc dù chưa ai có thể chứng minh điều đó). Khách sạn này được gọi là phỏng đoán Collatz .
Xác định thời gian dừng của số nguyên là số lần bạn phải chuyển qua chức năng Collatz f trước khi đạt 1. Đây là thời gian dừng của 15 số nguyên đầu tiên:
1 0
2 1
3 7
4 2
5 5
6 8
7 16
8 3
9 19
10 6
11 14
12 9
13 9
14 17
15 17
Chúng ta hãy gọi bất kỳ tập hợp số nào có cùng thời gian dừng với anh em họ Collatz . Ví dụ, 5 và 32 là anh em họ Collatz, với thời gian dừng là 5.
Nhiệm vụ của bạn: viết chương trình hoặc hàm lấy số nguyên không âm và tạo tập hợp anh em họ Collatz có thời gian dừng bằng số nguyên đó.
Đầu vào
Một số nguyên S không âm, được đưa ra thông qua STDIN, ARGV hoặc đối số hàm.
Đầu ra
Một danh sách của tất cả các số có thời gian dừng là S, được sắp xếp trong ascending trật tự. Danh sách có thể được xuất ra bởi chương trình của bạn, hoặc được trả về hoặc xuất ra bởi chức năng của bạn. Định dạng đầu ra rất linh hoạt: phân tách không gian, phân tách dòng mới hoặc bất kỳ định dạng danh sách tiêu chuẩn nào của ngôn ngữ của bạn đều tốt, miễn là các số có thể dễ dàng phân biệt với nhau.
Yêu cầu
Việc gửi của bạn phải cho kết quả chính xác cho bất kỳ S 30. Nó sẽ hoàn thành sau vài giây hoặc vài phút, không phải giờ hoặc ngày.
Ví dụ
0 -> 1
1 -> 2
5 -> 5, 32
9 -> 12, 13, 80, 84, 85, 512
15 -> 22, 23, 136, 138, 140, 141, 150, 151, 768, 832, 848, 852, 853, 904, 906, 908, 909, 5120, 5376, 5440, 5456, 5460, 5461, 32768
Đây là một ý chính của đầu ra cho S = 30 .
Đây là code-golf : chương trình ngắn nhất tính theo byte thắng. Chúc may mắn!