Os números de Fermat são números inteiros positivos que podem ser expressos como 2 2 x +1 com um número inteiro x.
Vamos agora definir um atributo de um número chamado "Fermat-ness":
- A Fermatividade do número é um menor que o comprimento da cadeia de potências de dois, começando pela base, com potências de duas expandidas, a fim de maximizar a fermatividade.
- Um número que não é um número de Fermat tem a Fermat-ness de zero.
Portanto, 17 (= 2 2 2 2 0 +1) tem Fermat-ness três.
Desafio
Dado um número inteiro diferente de zero positivo como entrada, imprima a Fermat-ness do número.
Regras
- Você pode usar a entrada em binário, decimal, hexadecimal, como um bignum ou em qualquer formato que permita melhor
- Sua solução deve ser capaz de processar números com tamanhos de bits acima de 64, independentemente da representação que você usar.
- Somente potências inteiras não-negativas.
- É claro que as brechas padrão são proibidas.
- Isso é código-golfe , então a resposta mais curta vence.
Casos de teste
Estes estão em formato input->output
. A entrada está em hexadecimal para economizar espaço.
10000000000000000000000000000000000000000000000000000000000000001 -> 2
1000000000000BC00000000000000000000000000000000001000000000000001 ->0
1234567890ABCDEF -> 0
100000000000000000000000000000001 -> 1
5 -> 2
11 -> 3
10001 -> 4
101 -> 1
O mesmo em decimal:
115792089237316195423570985008687907853269984665640564039457584007913129639937 -> 2
115792089237316497527923305698859709742143344804209838213621568094470773145601 -> 0
1311768467294899695 -> 0
340282366920938463463374607431768211457 -> 1
5 ->2
17 -> 3
65537 -> 4
257 -> 1
Obrigado ao geokavel pela contribuição inestimável na caixa de areia.
code-golf
number-theory
HAEM
fonte
fonte
Respostas:
Geléia ,
1514 bytes1 byte graças a Jonathan Allan.
Experimente online!
fonte
BḊCL⁸Ạ?
->BḊ⁸LṀ?
Python 2 ,
10381 bytesExperimente online!
Percebi que não ser estúpido ajudaria a diminuir minha contagem de bytes, então fiz isso. Também exponenciação em oposição aos logaritmos.
fonte
RProgN 2 , 75 bytes
Experimente online!
São apenas 70 bytes se você não adicionar o
«»'¤=
que atribui o cálculo de Fermatidade ao¤
personagem. Se você fizer isso, precisará inserir o número na seção Cabeçalho do TIO, em vez de no Rodapé, como está agora.Isso efetivamente usa a mesma lógica da minha resposta em Python; portanto, se você não se importa com o funcionamento do RProgN 2, basta olhar para esse para obter uma explicação do que está acontecendo. De outra forma
Repartição do código:
Infelizmente, a função de log
Š
e a função de exponenciação normal^
não têm a precisão necessária para fazer isso nativamente, então tive que redefinir como a exponenciação funcionava, pois a multiplicação carrega muito mais precisão. Sem essa redefinição, essa resposta seria 23 bytes menor.fonte
Perl 6 , 62 bytes
Experimente online!
fonte