Einführung
In dieser Herausforderung werden wir uns mit einer bestimmten Reihenfolge der positiven ganzen Zahlen befassen. Die Bestellung geht so:
3, 5, 7, 9, 11, ...
2*3, 2*5, 2*7, 2*9, 2*11, ...
4*3, 4*5, 4*7, 4*9, 4*11, ...
8*3, 8*5, 8*7, 8*9, 8*11, ...
16*3, 16*5, 16*7, 16*9, 16*11, ...
...
... 64, 32, 16, 8, 4, 2, 1
Wir listen zuerst alle ungeraden ganzen Zahlen größer als 1 in aufsteigender Reihenfolge auf. Dann führen wir zwei mal ungerade ganze Zahlen größer als 1, dann 4 - mal, dann 8 mal, und so weiter: für alle k , wir listen 2 k mal die ungeraden Zahlen größer als 1 , um aufzusteigen. Schließlich listen wir die Potenzen von zwei in absteigender Reihenfolge auf und enden bei 1. Jede positive ganze Zahl kommt in dieser "Liste" genau einmal vor.
Man betrachte genauer gesagt zwei verschiedene positive ganze Zahlen A = n · 2 p und B = m · 2 q , wobei n, m ≥ 1 ungerade sind und p, q ≥ 0 . In der Bestellung steht dann A vor B , wenn eine der folgenden Bedingungen zutrifft:
- n> 1 , m> 1 und p <q
- 1 <n <m und p = q
- n> m = 1
- n = m = 1 und p> q
Diese Ordnung kommt in dem überraschenden mathematischen Ergebnis vor, das als Sharkovski-Theorem bekannt ist und die periodischen Punkte dynamischer Systeme betrifft. Ich werde hier nicht auf die Details eingehen.
Die Aufgabe
Ihre Aufgabe bei dieser Herausforderung ist es, die obige Bestellung zu berechnen. Ihre Eingaben sind zwei positive ganze Zahlen A und B , die gleich sein können. Ihre Ausgabe ist ein wahrer Wert, wenn A in der Bestellung vor B steht , und ein falscher Wert, wenn nicht. Wenn A = B , sollte Ihre Ausgabe wahr sein. Sie können A und B in beliebiger Reihenfolge nehmen, solange Sie konsistent sind.
Sie müssen sich keine Gedanken über einen Ganzzahlüberlauf machen, aber Ihr Algorithmus sollte theoretisch für beliebig große Eingaben funktionieren.
Testfälle
Wahrheitsinstanzen
3 11
9 6
48 112
49 112
158 158
36 24
14 28
144 32
32 32
32 8
3 1
1 1
Falsche Instanzen
1 2
1 5
11 5
20 25
2 8
256 255
256 257
72 52
2176 1216
2176 2496
a&1|~b&1&f(a/2,b/2)
funktionieren