introduzione
In questa sfida, avremo a che fare con un certo infinito grafico non orientato, che io chiamo il grafico ad alto divisore . I suoi nodi sono numeri interi a partire da 2. C'è un bordo tra due nodi a <b se a divide b e a 2 ≥ b . Il sottografo formato dall'intervallo da 2 a 18 è simile al seguente:
16-8 12 18
\|/ |/|
4 6 9 10 15 14
| |/ |/ |
2 3 5 7 11 13 17
Si può dimostrare che il grafico del divisore alto infinito è collegato, quindi possiamo chiedere il percorso più breve tra due nodi.
Ingresso e uscita
I suoi ingressi sono due interi a e b . Si può presumere che 2 ≤ a ≤ b <1000 . L'output è la lunghezza del percorso più breve tra una e b nell'infinito grafico alta divisore. Ciò significa che il numero di spigoli nel percorso.
Potresti trovare utile il seguente fatto: esiste sempre un percorso ottimale da a a b che prima aumenta e poi diminuisce e visita solo nodi che sono rigorosamente inferiori a 2b 2 . In particolare, poiché b <1000 è necessario considerare solo nodi inferiori a 2 000 000.
Esempi
Considera gli input 3e 32. Un possibile percorso tra i nodi 3 e 32 è
3 -- 6 -- 12 -- 96 -- 32
Questo percorso ha quattro bordi e si scopre che non ci sono percorsi più corti, quindi l'output corretto è 4.
Come altro esempio, un percorso ottimale per 2ed 25è
2 -- 4 -- 8 -- 40 -- 200 -- 25
quindi l'output corretto è 5. In questo caso, nessun percorso ottimale contiene il nodo 50 = lcm(2, 25).
Regole e punteggio
È possibile scrivere un programma completo o una funzione. Vince il conteggio di byte più basso e non sono consentite scappatoie standard. Non ci sono limiti di tempo o di memoria, quindi è consentita la forzatura bruta.
Casi 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 viola il vincolo delle scappatoie standard? In tal caso, fammelo sapere e cancellerò la mia richiesta.