Dado um número inteiro , você precisa encontrar o número mínimo de bits que precisam ser invertidos em para transformá-lo em um número quadrado . Você só pode inverter bits abaixo do mais significativo .N
Exemplos
- já é um número quadrado ( ), portanto a saída esperada é . 0
- pode ser transformado em um número quadrado invertendo 1 bit: ( ), portanto a saída esperada é . 25 = 5 2 1
- não pode ser transformado em um número quadrado invertendo um único bit (os resultados possíveis são , , e ), mas isso pode ser feito invertendo 2 bits: ( ), portanto a saída esperada é .20 18 30 10110 → 10 0 0 0 16 = 4 2 2
Regras
- Tudo bem se o seu código for muito lento ou gerar um erro para os casos de teste maiores, mas deve, no mínimo, suportar em menos de 1 minuto.
- Isso é código-golfe !
Casos de teste
Input | Output
----------+--------
4 | 0
22 | 2
24 | 1
30 | 3
94 | 4
831 | 5
832 | 1
1055 | 4
6495 | 6
9999 | 4
40063 | 6
247614 | 7 (smallest N for which the answer is 7)
1049310 | 7 (clear them all!)
7361278 | 8 (smallest N for which the answer is 8)
100048606 | 8 (a bigger "8")
Ou no formato amigável de copiar / colar:
[4,22,24,30,94,831,832,1055,6495,9999,40063,247614,1049310,7361278,100048606]
100048606
no TIO, isso é um problema?