Votre défi, si vous choisissez de l'accepter, est, étant donné un entier K >= 1, de trouver des entiers non négatifs Aet B tels qu'au moins une des deux conditions suivantes soit vérifiée:
K = 2^A + 2^BK = 2^A - 2^B
S'il n'existe pas tel Aet B, votre programme peut se comporter de n'importe quelle façon. (Pour clarifier, Aet Bpeut être égal.)
Cas de test
Il existe souvent plusieurs solutions à un certain nombre, mais en voici quelques-unes:
K => A, B
1 => 1, 0
15 => 4, 0 ; 16 - 1 = 15
16 => 5, 4 ; 32 - 16 = 16; also 3, 3: 8 + 8 = 16
40 => 5, 3 ; 2^5 + 2^3 = 40
264 => 8, 3
17179867136 => 34, 11 ; 17179869184 - 2048 = 17179867136
Le dernier cas de test, 17179867136, doit être exécuté en moins de 10 secondes sur une machine relativement moderne. C'est un golf de code, donc le programme le plus court en octets gagne. Vous pouvez utiliser un programme complet ou une fonction.
16, les deux 5,4et 3,3sont valides.
A-il Bêtre négatif? (par exemple -1, -1pour 1)