introduction
Dans ce défi, nous aurons affaire à un certain ordre des entiers positifs. La commande se passe comme ceci:
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
Nous listons d’abord tous les entiers impairs supérieurs à 1 par ordre croissant. Ensuite, nous listons deux fois les entiers impairs supérieurs à 1, puis 4 fois, puis 8 fois, et ainsi de suite: pour tout k , nous listons 2 k fois les entiers impairs supérieurs à 1 par ordre croissant. Enfin, nous listons les puissances de deux dans l' ordre décroissant , se terminant à 1. Chaque entier positif apparaît dans cette "liste" exactement une fois.
Plus explicitement, considérons deux entiers positifs distincts A = n · 2 p et B = m · 2 q , où n, m ≥ 1 sont impairs et p, q ≥ 0 . Ensuite, A vient avant B dans l'ordre, si l'une des conditions suivantes est remplie:
- n> 1 , m> 1 et p <q
- 1 <n <m et p = q
- n> m = 1
- n = m = 1 et p> q
Cet ordre apparaît dans le résultat mathématique surprenant connu sous le nom de théorème de Sharkovskii , qui concerne les points périodiques des systèmes dynamiques. Je ne vais pas entrer dans les détails ici.
La tâche
Votre tâche dans ce défi est de calculer la commande ci-dessus. Vos entrées sont deux entiers positifs A et B , qui peuvent être égaux. Votre sortie est une valeur de vérité si A vient avant B dans la commande, et une valeur de fausseté sinon. Si A = B , votre sortie devrait être la vérité. Vous pouvez prendre A et B dans l'un ou l'autre ordre, tant que vous êtes cohérent.
Vous n'avez pas à vous soucier du dépassement d'entier, mais votre algorithme devrait théoriquement fonctionner pour des entrées arbitrairement grandes.
Cas de test
Instances de vérité
3 11
9 6
48 112
49 112
158 158
36 24
14 28
144 32
32 32
32 8
3 1
1 1
Instances de fausseté
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)
travailler?