180₁₀ = 10110100₂ => 101|10100 => искомое число после инвертирования должно быть не кратно 5.
Три левых разряда образуют 8 возможных вариантов и только для 2 вариантов (000 и 101) число будет кратно 5.
Ответ: 6
Все искомые числа после инвертирования равны 20 + x * 32, где x ∈ [0; 7]. Очевидно, что такое число будет кратно 5, только если x кратно 5. Т.е. если x = 0 или x = 5.
Собственно, это самое инвертирование вообще не нужно, т.к. множество чисел после инвертирования в точности совпадает с множеством чисел до инвертирования.
И если хочешь кодом, то:
cnt = 0
for i in range(256):
if i % 5 == 0: continue
cnt += int('101' + ('0000' + bin(i)[2:])[-5:], 2) == 180
print(cnt)
Или даже так:
cnt = 0
for i in range(256):
cnt += i % 5 != 0 and i % 32 == 20
print(cnt)
1. Строится восьмибитная двоичная запись числа N.
2. Все разряды двоичной записи инвертируются (0 заменяется на 1, 1 на 0).
3. Если полученное число кратно 5, то в двоичной записи старшие три разряда заменяются на 100, в противном случае в двоичной записи старшие три разряда заменяются на 101.
Полученная таким образом запись является двоичной записью искомого числа R. Сколько существует чисел N, из которых в результате выполнения алгоритма может получиться число 180?