Giới thiệu
Trong thử thách này, chúng ta sẽ xử lý một đồ thị vô hướng vô hạn nhất định, mà tôi gọi là đồ thị ước số cao . Các nút của nó là các số nguyên bắt đầu từ 2. Có một cạnh giữa hai nút <b nếu một phân chia b và một 2 ≥ b . Biểu đồ con được hình thành bởi phạm vi từ 2 đến 18 trông như thế này:
16-8 12 18
\|/ |/|
4 6 9 10 15 14
| |/ |/ |
2 3 5 7 11 13 17
Có thể chỉ ra rằng đồ thị ước số cao vô hạn được kết nối, vì vậy chúng ta có thể hỏi về con đường ngắn nhất giữa hai nút.
Đầu vào và đầu ra
Đầu vào của bạn là hai số nguyên a và b . Bạn có thể giả sử rằng 2 ≤ a ≤ b <1000 . Đầu ra của bạn là độ dài của đường đi ngắn nhất giữa a và b trong biểu đồ ước số cao vô hạn. Điều này có nghĩa là số cạnh trong đường dẫn.
Bạn có thể thấy thực tế sau đây hữu ích: luôn tồn tại một đường dẫn tối ưu từ a đến b đầu tiên tăng rồi giảm và chỉ truy cập các nút có độ chính xác nhỏ hơn 2b 2 . Cụ thể, vì b <1000, bạn chỉ cần xem xét các nút nhỏ hơn 2 000 000.
Ví dụ
Hãy xem xét các đầu vào 3
và 32
. Một đường dẫn có thể có giữa các nút 3 và 32 là
3 -- 6 -- 12 -- 96 -- 32
Đường dẫn này có bốn cạnh, và hóa ra không có đường dẫn ngắn hơn, vì vậy đầu ra chính xác là 4
.
Một ví dụ khác, một đường dẫn tối ưu cho 2
và 25
là
2 -- 4 -- 8 -- 40 -- 200 -- 25
vì vậy đầu ra đúng là 5
. Trong trường hợp này, không có đường dẫn tối ưu nào chứa nút 50 = lcm(2, 25)
.
Quy tắc và tính điểm
Bạn có thể viết một chương trình đầy đủ hoặc một chức năng. Số byte thấp nhất sẽ thắng và các sơ hở tiêu chuẩn không được phép. Không có giới hạn thời gian hoặc bộ nhớ, vì vậy buộc phải cho phép vũ phu.
Các trường hợp thử nghiệm
2 2 -> 0
2 3 -> 4
2 4 -> 1
2 5 -> 5
3 5 -> 4
6 8 -> 2
8 16 -> 1
12 16 -> 2
16 16 -> 0
2 25 -> 5
3 32 -> 4
2 256 -> 3
60 77 -> 3
56 155 -> 3
339 540 -> 2
6 966 -> 4
7 966 -> 2
11 966 -> 4
2 997 -> 7
991 997 -> 4
FindShortestPath
vi phạm các ràng buộc về sơ hở tiêu chuẩn không? Nếu có, chỉ cần cho tôi biết và tôi sẽ xóa bài đăng của mình.