Учитывая целое число , вы должны найти минимальное количество битов, которые нужно инвертировать в чтобы превратить его в квадратное число . Вам разрешено инвертировать только биты ниже самого значимого .N
Примеры
- 2 2 0 уже является квадратным числом ( ), поэтому ожидаемый результат равен .
- 11000 → 1100 1 25 = 5 2 1 можно превратить в квадратное число путем инвертирования 1 бита: ( ), поэтому ожидаемый результат равен .
- 23 20 18 30 10110 → 10 0 0 0 16 = 4 2 2 не может быть преобразовано в квадратное число путем инвертирования одного бита (возможные результаты - , , и ), но это может быть сделано путем инвертирования 2 битов: ( ), поэтому ожидаемый результат равен .
правила
- Хорошо, если ваш код слишком медленный или выдает ошибку для больших тестовых случаев, но он должен по крайней мере поддерживать менее чем за 1 минуту.
- Это код-гольф !
Контрольные примеры
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")
Или в удобном для копирования / вставки формате:
[4,22,24,30,94,831,832,1055,6495,9999,40063,247614,1049310,7361278,100048606]
100048606
TIO, это проблема?