Les nombres de Fermat sont des entiers positifs qui peuvent être exprimés comme 2 2 x +1 avec un entier x.
Définissons maintenant un attribut d'un nombre appelé "Fermat-ness":
- La fermeté du nombre est inférieure de un à la longueur de la chaîne de puissances de deux, à partir de la base, avec des puissances de deux étendues de manière à maximiser la fermeté.
- Un nombre qui n'est pas un nombre de Fermat a la fermeté de zéro.
Donc, 17 (= 2 2 2 2 0 +1) a trois fermetés.
Défi
Étant donné un entier positif non nul en entrée, affichez la fermeté du nombre.
Règles
- Vous pouvez prendre l'entrée en binaire, décimal, hexadécimal, comme un bignum, ou dans le format qui vous permet de jouer au mieux
- Votre solution doit être en mesure de traiter des nombres dont la longueur en bits est supérieure à 64, quelle que soit la représentation que vous utilisez.
- Puissances entières non négatives uniquement.
- Les failles standard sont bien entendu interdites.
- C'est le code-golf , donc la réponse la plus courte l'emporte.
Cas de test
Ce sont au format input->output
. L'entrée est en hexadécimal pour économiser de l'espace.
10000000000000000000000000000000000000000000000000000000000000001 -> 2
1000000000000BC00000000000000000000000000000000001000000000000001 ->0
1234567890ABCDEF -> 0
100000000000000000000000000000001 -> 1
5 -> 2
11 -> 3
10001 -> 4
101 -> 1
La même chose en décimal:
115792089237316195423570985008687907853269984665640564039457584007913129639937 -> 2
115792089237316497527923305698859709742143344804209838213621568094470773145601 -> 0
1311768467294899695 -> 0
340282366920938463463374607431768211457 -> 1
5 ->2
17 -> 3
65537 -> 4
257 -> 1
Merci à geokavel pour son apport inestimable dans le bac à sable.