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.
Réponses:
Gelée ,
1514 octets1 octet merci à Jonathan Allan.
Essayez-le en ligne!
la source
BḊCL⁸Ạ?
->BḊ⁸LṀ?
Python 2 ,
10381 octetsEssayez-le en ligne!
J'ai réalisé que ne pas être stupide aiderait à réduire mon nombre d'octets, alors je l'ai fait. Exponentiation également par opposition aux logarithmes.
la source
RProgN 2 , 75 octets
Essayez-le en ligne!
Ce n'est que 70 octets si vous n'ajoutez pas le
«»'¤=
qui assigne le calcul de Fermatness au¤
caractère. Si vous faites cela, vous devrez mettre le numéro dans la section En-tête de TIO plutôt que dans le pied de page tel qu'il est maintenant.Cela utilise effectivement la même logique que ma réponse Python, donc si vous ne vous souciez pas de la façon dont RProgN 2 fonctionne, regardez-la pour une explication de ce qui se passe. Autrement
Répartition du code:
Malheureusement, la fonction logarithmique
Š
et la fonction d'exponentiation normale^
manquent de précision pour le faire de manière native, j'ai donc dû redéfinir le fonctionnement de l'exponentiation car la multiplication est beaucoup plus précise. Sans cette redéfinition, cette réponse serait 23 octets plus courte.la source
Perl 6 , 62 octets
Essayez-le en ligne!
la source