Вступ
У цьому виклику ми матимемо справу з певним нескінченним непрямим графіком, який я називаю графіком високого ділення . Її вузли є цілими числами , починаючи з 2. Існує ребро між двома вузлами A <B , якщо ділить б і в 2 ≥ б . Підграф, утворений діапазоном від 2 до 18, виглядає так:
16-8 12 18
\|/ |/|
4 6 9 10 15 14
| |/ |/ |
2 3 5 7 11 13 17
Можна показати, що графік нескінченного високого дільника пов'язаний, тому ми можемо запитати про найкоротший шлях між двома вузлами.
Вхід і вихід
Ваші входи - це два цілі числа a і b . Можна припустити, що 2 ≤ a ≤ b <1000 . Ваш вихід - це довжина найкоротшого шляху між a і b в нескінченному графіку високого ділення. Це означає кількість ребер на шляху.
Наступний факт може бути корисним: завжди існує оптимальний шлях від a до b, який спочатку збільшується, а потім зменшується, і відвідує лише вузли, які суворо менші ніж 2b 2 . Зокрема, оскільки b <1000 потрібно розглядати лише вузли менше 2 000 000.
Приклади
Розглянемо вхідні дані 3
та 32
. Один можливий шлях між вузлами 3 та 32 - це
3 -- 6 -- 12 -- 96 -- 32
Цей шлях має чотири ребра, і, виявляється, немає коротших шляхів, тому правильний вихід є 4
.
Як інший приклад, оптимальний шлях для 2
і 25
є
2 -- 4 -- 8 -- 40 -- 200 -- 25
тому правильний вихід 5
. У цьому випадку жоден оптимальний шлях не містить вузла 50 = lcm(2, 25)
.
Правила та оцінка
Ви можете написати повну програму або функцію. Виграє найменший байт, а стандартні лазівки заборонені. Немає обмежень за часом та пам’яттю, тому грубе форсування дозволено.
Тестові справи
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
порушує Mathematica обмеження щодо стандартних лазів? Якщо це станеться, просто дайте мені знати, і я видалю своє подання.