Los números de Fermat son enteros positivos que se pueden expresar como 2 2 x +1 con un entero x.
Ahora definamos un atributo de un número llamado "Fermat-ness":
- La Fermatness del número es uno menos que la longitud de la cadena de poderes de dos, comenzando desde la base, con poderes de dos expandidos para maximizar la Fermatness.
- Un número que no es un número de Fermat tiene la Fermat-ness de cero.
Entonces, 17 (= 2 2 2 2 0 +1) tiene Fermat-ness tres.
Desafío
Dado un entero positivo distinto de cero como entrada, genera la Fermatness del número.
Reglas
- Puede tomar la entrada en binario, decimal, hexadecimal, como bignum, o cualquier formato que le permita jugar mejor al golf.
- Su solución debe poder procesar números con longitudes de bits superiores a 64, independientemente de la representación que utilice.
- Potencias enteras no negativas solamente.
- Las lagunas estándar están, por supuesto, prohibidas.
- Este es el código de golf , por lo que gana la respuesta más corta.
Casos de prueba
Estos están en formato input->output
. La entrada está en hexadecimal para ahorrar espacio.
10000000000000000000000000000000000000000000000000000000000000001 -> 2
1000000000000BC00000000000000000000000000000000001000000000000001 ->0
1234567890ABCDEF -> 0
100000000000000000000000000000001 -> 1
5 -> 2
11 -> 3
10001 -> 4
101 -> 1
Lo mismo en decimal:
115792089237316195423570985008687907853269984665640564039457584007913129639937 -> 2
115792089237316497527923305698859709742143344804209838213621568094470773145601 -> 0
1311768467294899695 -> 0
340282366920938463463374607431768211457 -> 1
5 ->2
17 -> 3
65537 -> 4
257 -> 1
Gracias a geokavel por su valiosa aportación en el sandbox.
code-golf
number-theory
HAEM
fuente
fuente
Respuestas:
Jalea ,
1514 bytes1 byte gracias a Jonathan Allan.
Pruébalo en línea!
fuente
BḊCL⁸Ạ?
->BḊ⁸LṀ?
Python 2 ,
10381 bytesPruébalo en línea!
Me di cuenta de que no ser estúpido ayudaría a reducir mi número de bytes, así que lo hice. También exponenciación frente a logaritmos.
fuente
RProgN 2 , 75 bytes
Pruébalo en línea!
Son solo 70 bytes si no agrega el
«»'¤=
que asigna el cálculo de Fermatness al¤
personaje. Si lo hace, deberá colocar el número en la sección Encabezado de TIO en lugar de en el Pie de página como está ahora.Esto utiliza efectivamente la misma lógica que mi respuesta de Python, por lo que si no te importa cómo funciona RProgN 2, solo mira esa para obtener una explicación de lo que está sucediendo. De otra manera
Desglose del código:
Desafortunadamente, la función de registro
Š
y la función de exponenciación normal^
carecen de la precisión para hacer esto de forma nativa, por lo que tuve que redefinir cómo funcionaba la exponenciación ya que la multiplicación conlleva mucha más precisión. Sin esa redefinición, esta respuesta sería 23 bytes más corta.fuente
Perl 6 , 62 bytes
Pruébalo en línea!
fuente