Подсчёт количества едениц в строке
Сколько единиц содержится в двоичной записи значения выражения: 4^255 + 2^255 − 255?
a = list(bin(4**255+ 2**255 - 255))
k = 0
for i in range(len(a)):
if a[i] == 1:
k += 1
print (k)
Что не так? И пожалуйста объясните.
Ответы (2 шт):
Способ 1.
str(4**255 + 2**255 - 255).count('1')
Приводим к строке, вызываем строковый метод подсчета символа.
Способ 2.
sum(1 for elem in bin(4**255+ 2**255 - 255)) if elem == '1')
Считаем количество единиц, так как функция bin переводит к строковому типу вида '0bxxx', где xxx - цифры числа в двоичном представлении.
Способ 3.
Также существует несложный алгоритм.
4^255 = 2^(255 * 2) степень двойки, будет обозначать единица в двоичном представлении данной суммы.
2^255 -- аналогично.
С вычитанием интереснее, можно проследить следующую закономерность:
2^n - 2^m -- будет содержать n - m единиц (проверьте это и докажите самостоятельно).
Отсюда сделаем следующий финт: -255 = -256 + 1 = -2^8 + 2^0
В итоге наше выражение: 2^(255 * 2) + 2^255 - 2^8 + 1 будет иметь 1 + (255 - 8) + 1 единицу, так как 2^255 - 2^8 четное число и значит нулевой бит у него будет нулевой и прибавление единицы добавит только единицу.
a = ((8**1341)-(4**1342)+(2**1343)-1344)
result = bin(a).count ('1')
print (result)
у меня другое выражение но способ этот тоже работает вроде бы