Задание №13 — Количество путей в ориентированном графе
В терминологии сетей TCP/IP маской сети называют двоичное число, которое показывает, какая часть IP-адреса узла сети относится к адресу сети, а какая – к адресу узла в этой сети. Адрес сети получается в результате применения поразрядной конъюнкции к заданному адресу узла и маске сети. Сеть задана IP-адресом 192.168.32.160 и маской сети 255.255.255.240.
Сколько в этой сети IP-адресов, для которых сумма единиц в двоичной записи IP-адреса чётна? В ответе укажите только число.
Правильный ответ
8
Пояснение
Решение:
Последний байт маски равен , значит под номер узла отведены 4 младших бита адреса, а адрес сети равен 192.168.32.160 (действительно, ). Всего в сети адресов: от 192.168.32.160 до 192.168.32.175.
Старшие 28 битов у всех этих адресов одинаковы. Посчитаем в них единицы: — 2 единицы, — 3, — 1, старшая тетрада последнего байта — 2. Итого — число чётное.
Поэтому чётность общего количества единиц определяется только младшей тетрадой: нужно, чтобы в этих 4 свободных битах было чётное число единиц. Таких наборов — ровно половина из шестнадцати.
ip = [192, 168, 32, 160]
mask = [255, 255, 255, 240]
net = [ip[i] & mask[i] for i in range(4)]
count = 0
for host in range(16):
addr = net[:3] + [net[3] | host]
if sum(bin(b).count('1') for b in addr) % 2 == 0:
count += 1
print(count)Ответ: 8