Introducción
En este desafío, trataremos con un cierto gráfico infinito no dirigido, que yo llamo el gráfico de alto divisor . Sus nodos son los enteros a partir de 2. Hay un borde entre dos nodos a <b si a divide b y a 2 ≥ b . El subgrafo formado por el rango de 2 a 18 se ve así:
16-8 12 18
\|/ |/|
4 6 9 10 15 14
| |/ |/ |
2 3 5 7 11 13 17
Se puede demostrar que el gráfico infinito de divisores altos está conectado, por lo que podemos preguntar sobre la ruta más corta entre dos nodos.
Entrada y salida
Sus entradas son dos enteros a y b . Puede suponer que 2 ≤ a ≤ b <1000 . Su salida es la longitud del camino más corto entre una y b en el gráfico de alta divisor infinito. Esto significa el número de bordes en la ruta.
Puede encontrar útil el siguiente hecho: siempre existe una ruta óptima desde a hasta b que primero aumenta y luego disminuye, y solo visita nodos que son estrictamente menores que 2b 2 . En particular, dado que b <1000 solo necesita considerar nodos inferiores a 2 000 000.
Ejemplos
Considere las entradas 3
y 32
. Una posible ruta entre los nodos 3 y 32 es
3 -- 6 -- 12 -- 96 -- 32
Esta ruta tiene cuatro bordes, y resulta que no hay rutas más cortas, por lo que la salida correcta es 4
.
Como otro ejemplo, una ruta óptima para 2
y 25
es
2 -- 4 -- 8 -- 40 -- 200 -- 25
entonces la salida correcta es 5
. En este caso, ninguna ruta óptima contiene el nodo 50 = lcm(2, 25)
.
Reglas y puntaje
Puede escribir un programa completo o una función. El conteo de bytes más bajo gana, y las lagunas estándar no se permiten. No hay límites de tiempo o memoria, por lo que se permite el forzamiento bruto.
Casos de prueba
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
la restricción sobre las lagunas estándar? Si es así, házmelo saber y eliminaré mi envío.