Votre défi, si vous choisissez de l'accepter, est, étant donné un entier K >= 1
, de trouver des entiers non négatifs A
et B
tels qu'au moins une des deux conditions suivantes soit vérifiée:
K = 2^A + 2^B
K = 2^A - 2^B
S'il n'existe pas tel A
et B
, votre programme peut se comporter de n'importe quelle façon. (Pour clarifier, A
et B
peut ê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,4
et 3,3
sont valides.
A
-il B
être négatif? (par exemple -1, -1
pour 1)