introduction
Dans ce défi, nous aurons affaire à un certain graphe infini non orienté, que j'appelle le graphe à diviseur élevé . Ses nœuds sont les entiers à partir de 2. Il y a un bord entre deux nœuds a <b si a divise b et a 2 ≥ b . Le sous-graphique formé par la plage de 2 à 18 ressemble à ceci:
16-8 12 18
\|/ |/|
4 6 9 10 15 14
| |/ |/ |
2 3 5 7 11 13 17
Il peut être démontré que le graphe diviseur infini est connecté, nous pouvons donc nous interroger sur le chemin le plus court entre deux nœuds.
Entrée et sortie
Vos entrées sont deux entiers a et b . Vous pouvez supposer que 2 ≤ a ≤ b <1000 . Votre sortie est la longueur du chemin le plus court entre a et b dans le graphique de diviseur élevé infini. Cela signifie le nombre d'arêtes dans le chemin.
Vous pouvez trouver le fait suivant utile: il existe toujours un chemin optimal de a vers b qui augmente d'abord puis diminue, et ne visite que les nœuds strictement inférieurs à 2b 2 . En particulier, puisque b <1000, il suffit de considérer les nœuds inférieurs à 2 000 000.
Exemples
Considérez les entrées 3
et 32
. Un chemin possible entre les nœuds 3 et 32 est
3 -- 6 -- 12 -- 96 -- 32
Ce chemin a quatre bords, et il s'avère qu'il n'y a pas de chemins plus courts, donc la sortie correcte est 4
.
Comme autre exemple, un chemin optimal pour 2
et 25
est
2 -- 4 -- 8 -- 40 -- 200 -- 25
donc la sortie correcte est 5
. Dans ce cas, aucun chemin optimal ne contient le nœud 50 = lcm(2, 25)
.
Règles et notation
Vous pouvez écrire un programme complet ou une fonction. Le nombre d'octets le plus bas gagne et les failles standard sont interdites. Il n'y a pas de limite de temps ou de mémoire, le forçage brutal est donc autorisé.
Cas de test
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
viole-t-il la contrainte sur les failles standard? Si c'est le cas, faites-le moi savoir et je supprimerai ma soumission.