Dato un numero intero , devi trovare il numero minimo di bit che devono essere invertiti in per trasformarlo in un numero quadrato . È consentito invertire solo i bit al di sotto di quello più significativo .
Esempi
- è già un numero quadrato ( ), quindi l'output previsto è .
- può essere trasformato in un numero quadrato invertendo 1 bit: ( ), quindi l'output previsto è .
- non può essere trasformato in un numero quadrato invertendo un singolo bit (i risultati possibili sono , , e ), ma può essere fatto invertendo 2 bit: ( ), quindi l'output previsto è .
Regole
- Va bene se il tuo codice è troppo lento o genera un errore per i casi di test più grandi, ma dovrebbe almeno supportare in meno di 1 minuto.
- Questo è code-golf !
Casi test
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")
O in formato amichevole copia / incolla:
[4,22,24,30,94,831,832,1055,6495,9999,40063,247614,1049310,7361278,100048606]
100048606
su TIO, è un problema?