Einführung
In dieser Herausforderung werden wir uns mit einem bestimmten unendlichen ungerichteten Graphen befassen, den ich den Hochteiler-Graphen nenne . Seine Knoten sind die ganzen Zahlen ab 2. Es gibt eine Kante zwischen zwei Knoten a <b, wenn a b und a 2 ≥ b teilt . Der durch den Bereich von 2 bis 18 gebildete Teilgraph sieht folgendermaßen aus:
16-8 12 18
\|/ |/|
4 6 9 10 15 14
| |/ |/ |
2 3 5 7 11 13 17
Es kann gezeigt werden, dass der unendliche Hochteilergraph verbunden ist, sodass wir nach dem kürzesten Weg zwischen zwei Knoten fragen können.
Ein- und Ausgabe
Ihre Eingaben sind zwei ganze Zahlen a und b . Sie können annehmen, dass 2 ≤ a ≤ b <1000 ist . Ihre Ausgabe ist die Länge des kürzesten Pfades zwischen a und b im unendlichen Hochdivisor-Diagramm. Dies bedeutet die Anzahl der Kanten im Pfad.
Möglicherweise ist die folgende Tatsache hilfreich: Es gibt immer einen optimalen Pfad von a nach b , der zuerst zunimmt und dann abnimmt, und es werden nur Knoten besucht, die strikt kleiner als 2b 2 sind . Da b <1000 ist, müssen Sie insbesondere nur Knoten mit weniger als 2 000 000 berücksichtigen.
Beispiele
Betrachten Sie die Eingänge 3
und 32
. Ein möglicher Weg zwischen den Knoten 3 und 32 ist
3 -- 6 -- 12 -- 96 -- 32
Dieser Pfad hat vier Kanten und es stellt sich heraus, dass es keine kürzeren Pfade gibt. Daher ist die Ausgabe korrekt 4
.
Als weiteres Beispiel wird ein optimaler Weg für 2
und 25
ist
2 -- 4 -- 8 -- 40 -- 200 -- 25
also die richtige ausgabe ist 5
. In diesem Fall enthält kein optimaler Pfad den Knoten 50 = lcm(2, 25)
.
Regeln und Wertung
Sie können ein vollständiges Programm oder eine Funktion schreiben. Die niedrigste Byteanzahl gewinnt, und Standardlücken sind nicht zulässig. Es gibt keine Zeit- oder Speicherbeschränkungen, daher ist Brute Forcing zulässig.
Testfälle
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
verstößt Mathematica gegen die Vorgabe von Standardlücken? Wenn ja, lass es mich einfach wissen und ich werde meinen Beitrag löschen.