Teacher & coder

Задача № 96. Сколько в этой сети IP-адресов, для которых сумма единиц в двоичной записи IP-адреса чётна?

В терминологии сетей ТСР/Р маской сети называют двоичное число, которое показывает, какая часть IP-адреса узла сети относится к адресу сети, а какая — к адресу узла в этой сети. Адрес сети получается в результате применения поразрядной коньюнкции к заданному адресу узла и маске сети.

Сеть задана IP-адресом 192.168.32.160 и маской сети 255.255.255.240.

Сколько в этой сети IP-адресов, для которых сумма единиц в двоичной записи IP-адреса чётна?

В ответе укажите только число.

Можно скопировать и вставить все ответы сразу
Демонстрационный вариант 2024 года
Прокрути, чтобы прочитать решение задачи
Ты уверен, что хочешь это сделать?
Удачного чтения!

Решение

В этой задаче адрес сети неважен. Чтобы решить, определим, сколько адресов допускает маска. Для этого посчитаем количество нулей в маске.

\( 240_{10} = 1111 \)\(0000\)\(_2\)

В маске четыре нуля. Она допускает \( 2^4=16 \) адресов. Ровно половина адресов будет с чётной суммой единиц.

Решим задачу с помощью Python

Переберём все адреса и посчитаем, сколько из них содержат чётное количество единиц.

# подключим библиотеку для работы с ip-адресами
from ipaddress import IPv4Network

# определим сеть, используя адрес сети и маску
network = IPv4Network("192.168.32.160/255.255.255.240")

# в переменную count сохраним количество адресов с чётной суммой единиц
count = 0
  
# посмотрим на каждый адрес в сети
for addr in network:
    # f"{addr:b}" — преобразует адрес в двоичное число
    if f"{addr:b}".count('1') % 2 == 0:
        # посчитаем адрес, если количество единиц чётное
        count += 1

# выводим ответ
print(count)

Всё то же самое, но коротко.

from ipaddress import IPv4Network

network = IPv4Network("192.168.32.160/255.255.255.240")
print(sum(f"{addr:b}".count('1') % 2 == 0 for addr in network))

Артём Зинкин

Лучше не гуглить и подумать самостоятельно. Тест можно пройти несколько раз :)
Чтобы поделиться задачей с коллегами или друзьями, отправьте им ссылку :)
Забыл сказать, что у этой задачи есть подробное решение. Посмотрите его :)
Попробуйте решить эту задачу сами и посмотрите наши разборы похожих задач :)
Кстати, на ЕГЭ тоже нельзя копировать :)
Этим материалом удобно поделиться по прямой ссылке :)