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 3und 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 2und 25ist
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.