Introdução
Neste desafio, trataremos de um certo gráfico infinito e não direcionado, que chamo de gráfico de alto divisor . Seus nós são os números inteiros a partir de 2. Existe uma aresta entre dois nós a <b se a divide b e a 2 ≥ b . O subgráfico formado pelo intervalo de 2 a 18 tem a seguinte aparência:
16-8 12 18
\|/ |/|
4 6 9 10 15 14
| |/ |/ |
2 3 5 7 11 13 17
Pode-se mostrar que o gráfico do divisor alto infinito está conectado, para que possamos perguntar sobre o caminho mais curto entre dois nós.
Entrada e saída
Suas entradas são dois inteiros a e b . Você pode assumir que 2 ≤ a ≤ b <1000 . A sua saída é o comprimento do caminho mais curto entre um e b no gráfico alta divisor infinito. Isso significa o número de arestas no caminho.
Você pode achar útil o seguinte fato: sempre existe um caminho ideal de a para b que primeiro aumenta e depois diminui, e apenas visita nós que são estritamente menores que 2b 2 . Em particular, como b <1000, você precisa considerar apenas os nós inferiores a 2 000 000.
Exemplos
Considere as entradas 3
e 32
. Um caminho possível entre os nós 3 e 32 é
3 -- 6 -- 12 -- 96 -- 32
Esse caminho tem quatro arestas e, como não há caminhos mais curtos, a saída correta é 4
.
Como outro exemplo, um caminho ideal para 2
e 25
é
2 -- 4 -- 8 -- 40 -- 200 -- 25
então a saída correta é 5
. Nesse caso, nenhum caminho ideal contém o nó 50 = lcm(2, 25)
.
Regras e pontuação
Você pode escrever um programa completo ou uma função. A contagem de bytes mais baixa vence e as brechas padrão não são permitidas. Não há tempo ou limites de memória, portanto, a força bruta é permitida.
Casos de teste
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
viola a restrição sobre brechas comuns? Se isso acontecer, avise-me e excluirei meu envio.