Wprowadzenie
W tym wyzwaniu będziemy mieli do czynienia z pewną kolejnością liczb całkowitych dodatnich. Kolejność wygląda następująco:
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
Najpierw podajemy wszystkie nieparzyste liczby całkowite większe niż 1 w porządku rosnącym. Następnie podajemy dwa razy nieparzyste liczby całkowite większe niż 1, następnie 4 razy, następnie 8 razy i tak dalej: dla wszystkich k podajemy 2 k nieparzyste liczby całkowite większe niż 1 w porządku rosnącym. Na koniec podajemy potęgę dwóch w porządku malejącym , kończąc na 1. Każda dodatnia liczba całkowita występuje na tej „liście” dokładnie raz.
Mówiąc dokładniej, rozważ dwie różne dodatnie liczby całkowite A = n · 2 p i B = m · 2 q , gdzie n, m ≥ 1 są nieparzyste, a p, q ≥ 0 . Następnie A pojawia się przed B w porządku, jeśli zachodzi jeden z następujących warunków:
- n> 1 , m> 1 i p <q
- 1 <n <m i p = q
- n> m = 1
- n = m = 1, a s> Q
To uporządkowanie pojawia się w zaskakującym wyniku matematycznym znanym jako twierdzenie Sharkovskiego , które dotyczy okresowych punktów układów dynamicznych. Nie będę tu wchodził w szczegóły.
Zadanie
Twoim zadaniem w tym wyzwaniu jest obliczenie powyższej kolejności. Twoje dane wejściowe to dwie dodatnie liczby całkowite A i B , które mogą być równe. Twój wynik jest prawdziwą wartością, jeśli A pojawia się przed B w kolejności, a fałszem w przeciwnym razie. Jeśli A = B , twój wynik powinien być prawdziwy. Możesz wziąć A i B w dowolnej kolejności, o ile jesteś konsekwentny.
Nie musisz się martwić przepełnieniem liczb całkowitych, ale Twój algorytm powinien teoretycznie działać dla dowolnie dużych danych wejściowych.
Przypadki testowe
Prawdziwe przypadki
3 11
9 6
48 112
49 112
158 158
36 24
14 28
144 32
32 32
32 8
3 1
1 1
Instancje Falsy
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)
zadziała?