В терминологии сетей ТСР/IP маской сети называют двоичное число, которое показывает, какая часть IP-адреса узла сети относится к адресу сети, а какая — к адресу узла в этой сети. Адрес сети получается в результате применения поразрядной конъюнкции к заданному адресу узла и его маске. Сеть задана IP-адресом 112.160.0.0 и сетевой маской 255.240.0.0.
Сколько в этой сети IP-адресов, для которых количество единиц в двоичной записи IP-адреса
В ответе укажите только число.
Выпишем адрес сети и маску в двоичной системе счисления:
112.160.0.010 = 0111 0000. 1010 0000. 0000 0000. 0000 00002,
255.240.0.010 = 1111 1111. 1111 0000. 0000 0000. 0000 00002.
Все IP-адреса в сети будут иметь вид:
0111 0000. 1010 xxxx. xxxx xxxx. xxxx xxxx2.
Посчитаем количество вариантов, для которых количество единиц в двоичной записи IP-адреса
Приведём программу на языке Python.
import itertools
count = 0
s = itertools.product([0,1],repeat = 20)
for i in s:
if (5 + sum(i))%5 !=0:
count += 1
print(count)
Ответ: 832810.
Приведём решение Ильи Андрианова на языке Python.
from ipaddress import *
net = ip_network(f'112.160.0.0/255.240.0.0', 0)
cnt = 0
for ip in net:
s = f'{ip:b}'
if s.count('1') % 5 != 0:
cnt += 1
print(cnt)
Приведём решение Данила Шарлова на языке Python.
from ipaddress import ip_network
net = ip_network('112.160.0.0/255.240.0.0',0)
print(sum(bin(int(ip)).count('1')%5!=0 for ip in net))
Приведём решение Юрия Красильникова на языке Python.
from math import comb # Число сочетаний
print(sum(comb(20,n) for n in range(21) if n%5 != 0))

