В терминологии сетей TCP/IP маска сети — это двоичное число, меньшее 232; в маске сначала (в старших разрядах) стоят единицы, а затем с некоторого места нули. Маска определяет, какая часть IP-адреса узла сети относится к адресу сети, а какая — к адресу самого узла в этой сети.
Обычно маска записывается по тем же правилам, что и IP-адрес — в виде четырёх байт, причём каждый байт записывается в виде десятичного числа. Адрес сети получается в результате применения поразрядной конъюнкции к заданному IP-адресу узла и маске.
Например, если IP-адрес узла равен 131.32.255.131, а маска равна 255.255.240.0, то адрес сети равен 131.32.240.0.
Сеть задана IP-адресом 102.14.160.0 и маской сети 255.255.224.0.
Сколько в этой сети IP-адресов, для которых количество единиц в двоичной записи IP-адреса не кратно 4?
В ответе укажите только число.
Приведём решение на языке Python.
from itertools import product as p
print(sum(1 for s in p('01', repeat=13) if (9 + s.count('1')) % 4))
Приведём другое решение на языке Python.
count = 0
for i in range(8192): # 8192 адреса в сети
# Вычисляем текущий IP-адрес
ip = (102 << 24) | (14 << 16) | (160 + (i // 256) << 8) | (i % 256)
# Подсчитываем количество единиц
if bin(ip).count('1') % 4 != 0:
count += 1
print(count)
Ответ: 6112.
Приведём решение Александра Тарасова на языке Python.
from ipaddress import *
net = ip_network('102.14.160.0/255.255.224.0',0)
count=0
for host in net:
if bin(int(host))[2:].count('1')%4 != 0:
count+=1
print(count)

