Wprowadzenie
W tym wyzwaniu będziemy mieli do czynienia z pewnym nieskończonym niekierowanym wykresem, który nazywam wykresem wysokiego dzielnika . Węzłami są liczbami całkowitymi, począwszy od 2. Nie jest krawędź między dwoma węzłami <b jeśli dzieli b i a 2 ≥ b . Podgraf utworzony przez zakres od 2 do 18 wygląda następująco:
16-8 12 18
\|/ |/|
4 6 9 10 15 14
| |/ |/ |
2 3 5 7 11 13 17
Można pokazać, że wykres nieskończonego wysokiego dzielnika jest połączony, więc możemy zapytać o najkrótszą ścieżkę między dwoma węzłami.
Wejście i wyjście
Twoje dane wejściowe to dwie liczby całkowite a i b . Możesz założyć, że 2 ≤ a ≤ b <1000 . Jego wynik jest długością najkrótszej trasy między i b w nieskończonym wykresie wysokiej dzielnik. Oznacza to liczbę krawędzi na ścieżce.
Przydatny może być następujący fakt: zawsze istnieje optymalna ścieżka od a do b, która najpierw rośnie, a następnie maleje i odwiedza tylko węzły, które są mniejsze niż 2b 2 . W szczególności, ponieważ b <1000 , należy wziąć pod uwagę tylko węzły mniejsze niż 2 000 000.
Przykłady
Rozważ dane wejściowe 3
i 32
. Jedną z możliwych ścieżek między węzłami 3 i 32 jest
3 -- 6 -- 12 -- 96 -- 32
Ta ścieżka ma cztery krawędzie i okazuje się, że nie ma krótszych ścieżek, więc prawidłowy wynik to 4
.
Kolejnym przykładem jest optymalna ścieżka dla 2
i 25
jest
2 -- 4 -- 8 -- 40 -- 200 -- 25
więc poprawne wyjście to 5
. W takim przypadku żadna optymalna ścieżka nie zawiera węzła 50 = lcm(2, 25)
.
Zasady i punktacja
Możesz napisać pełny program lub funkcję. Wygrywa najniższa liczba bajtów, a standardowe luki są niedozwolone. Nie ma ograniczeń czasu ani pamięci, więc dozwolone jest brutalne wymuszanie.
Przypadki testowe
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
narusza ograniczenie dotyczące standardowych luk? Jeśli tak, daj mi znać, a ja usunę swoje zgłoszenie.