В терминологии сетей TCP/IP маской сети называется двоичное число, определяющее, какая часть IP-адреса узла сети относится к адресу сети, а какая — к адресу самого узла в этой сети. При этом в маске сначала (в старших разрядах) стоят единицы, а затем с некоторого места — нули. Адрес сети получается в результате применения поразрядной конъюнкции к заданному IP-адресу узла и маске.
Например, если IP-адрес узла равен 231.32.255.131, а маска равна 255.255.240.0, то адрес сети равен 231.32.240.0.
Известно, что в составе сети, которой принадлежит IP-адрес 147.222.199.75, есть узел, в IP-адресе которого первый байт совпадает с четвёртым, а второй — с третьим.
Укажите наименьшее возможное количество принадлежащих этой сети IP-адресов, в двоичной записи которых ровно 14 единиц.
Например, если IP-адрес узла равен 231.32.255.131, а маска равна 255.255.240.0, то адрес сети равен 231.32.240.0.
Известно, что в составе сети, которой принадлежит IP-адрес 147.222.199.75, есть узел, в IP-адресе которого первый байт совпадает с четвёртым, а второй — с третьим.
Укажите наименьшее возможное количество принадлежащих этой сети IP-адресов, в двоичной записи которых ровно 14 единиц.
💡 Пошаговый разбор и решение:
Запишем второй узел, в IP-адресе которого первый байт совпадает с четвёртым, а второй — с третьим: 147.222.222.147.
Выпишем двоичное представление IP-адресов:
147.222.199.75: 10010011.11011110.11000111.01001011,
147.222.222.147: 10010011.11011110.11011110.10010011.
Заметим, что IP-адреса различаются в третьем байте слева. Отличие в 4 бите слева. Соответственно маска будет выглядеть так:
255.255.224.0: 11111111.11111111.11100000.00000000.
В части IP-адресов, соответствующих 1 в маске содержится 12 единиц. По условию задачи, в двоичной записи IP-адресов должно быть ровно 14 единиц. Следовательно, на оставшиеся 13 бит адреса (биты, соответствующие 0 в маске) должно приходиться 2 единицы. Количество способов расставить 2 единицы по 13 местам = :
$\frac{13 \cdot 12}{2} = 78$
Наименьшее возможное количество принадлежащих этой сети IP-адресов, в двоичной записи которых ровно 14 единиц, = 78.
Ответ: 78.
Примечание.
В маске после нуля идут только одни нули.
Приведём решение Валерия Кабаладзе на языке Python.
from ipaddress import *
ipu = '147.222.199.75'
ipu_m = ipu[0:8] + ipu[4:8] + ipu[0:3]
for mask in range(32, 0, -1):
try:
net = ip_network(f'{ipu}/{mask}',0)
c = 0
if ip_address(f'{ipu_m}') in net:
for ip in net:
ipb = f'{ip:b}'
if ipb.count('1') == 14:
c+=1
if c > 0:
print(c)
break
except:
break
Приведём решение Данила Шарлова на языке Python.
from ipaddress import ip_network, ip_address
ipu = '147.222.199.75'
ipu_modified = '147.222.222.147'
for mask in range(32, 0, -1):
network = ip_network(f'{ipu}/{mask}', 0)
count = 0
if ip_address(ipu_modified) in network:
for ip in network:
if bin(int(ip)).count('1') == 14:
count += 1
if count > 0:
print(count)
break
Приведём решение Бориса Савельева на языке Python.
from itertools import product
s=product('01',repeat = 13)
k=0
for i in s:
if (12+i.count('1'))==14:
k+=1
print(k)
Приведём решение Юрия Красильникова на языке Python.
import ipaddress,math
s1 = bin(int(ipaddress.ip_address('147.222.199.75')))[2:].zfill(32) # Двоичное представление 1-го ip-адреса
s2 = bin(int(ipaddress.ip_address('147.222.222.47')))[2:].zfill(32) # Двоичное представление 2-го ip-адреса
for l in range(32):
if s1[l] != s2[l]: break # l - максимальная длина адреса сети (до первого несовпадающего бита)
k = 14-s1[:l].count('1') # количество единиц в номере узла
dnu = 32-l # длина номера узла
print(math.comb(dnu,k)) # число сочетаний из dnu по k
Выпишем двоичное представление IP-адресов:
147.222.199.75: 10010011.11011110.11000111.01001011,
147.222.222.147: 10010011.11011110.11011110.10010011.
Заметим, что IP-адреса различаются в третьем байте слева. Отличие в 4 бите слева. Соответственно маска будет выглядеть так:
255.255.224.0: 11111111.11111111.11100000.00000000.
В части IP-адресов, соответствующих 1 в маске содержится 12 единиц. По условию задачи, в двоичной записи IP-адресов должно быть ровно 14 единиц. Следовательно, на оставшиеся 13 бит адреса (биты, соответствующие 0 в маске) должно приходиться 2 единицы. Количество способов расставить 2 единицы по 13 местам = :
$\frac{13 \cdot 12}{2} = 78$
Наименьшее возможное количество принадлежащих этой сети IP-адресов, в двоичной записи которых ровно 14 единиц, = 78.
Ответ: 78.
Примечание.
В маске после нуля идут только одни нули.
Приведём решение Валерия Кабаладзе на языке Python.
from ipaddress import *
ipu = '147.222.199.75'
ipu_m = ipu[0:8] + ipu[4:8] + ipu[0:3]
for mask in range(32, 0, -1):
try:
net = ip_network(f'{ipu}/{mask}',0)
c = 0
if ip_address(f'{ipu_m}') in net:
for ip in net:
ipb = f'{ip:b}'
if ipb.count('1') == 14:
c+=1
if c > 0:
print(c)
break
except:
break
Приведём решение Данила Шарлова на языке Python.
from ipaddress import ip_network, ip_address
ipu = '147.222.199.75'
ipu_modified = '147.222.222.147'
for mask in range(32, 0, -1):
network = ip_network(f'{ipu}/{mask}', 0)
count = 0
if ip_address(ipu_modified) in network:
for ip in network:
if bin(int(ip)).count('1') == 14:
count += 1
if count > 0:
print(count)
break
Приведём решение Бориса Савельева на языке Python.
from itertools import product
s=product('01',repeat = 13)
k=0
for i in s:
if (12+i.count('1'))==14:
k+=1
print(k)
Приведём решение Юрия Красильникова на языке Python.
import ipaddress,math
s1 = bin(int(ipaddress.ip_address('147.222.199.75')))[2:].zfill(32) # Двоичное представление 1-го ip-адреса
s2 = bin(int(ipaddress.ip_address('147.222.222.47')))[2:].zfill(32) # Двоичное представление 2-го ip-адреса
for l in range(32):
if s1[l] != s2[l]: break # l - максимальная длина адреса сети (до первого несовпадающего бита)
k = 14-s1[:l].count('1') # количество единиц в номере узла
dnu = 32-l # длина номера узла
print(math.comb(dnu,k)) # число сочетаний из dnu по k
Правильный ответ:
78
📚 Похожие разобранные задания по предмету:
ID 140978 • Задание №18
Выберите ОДНО из предложенных ниже заданий: 15.1 или 15.2.
15.1 Исполнитель Робот умеет перемещаться по лабир...
ID 33148 • Задание №19
Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежат две кучи камней. Игроки ходят по очеред...
🔗 Другие задания линии №13 по предмету Информатика:
ID 31876
Маской подсети называется 32-разрядное двоичное число, которое определяет, какая часть IP-адр...
ID 31877
В терминологии сетей TCP/IP маской подсети называется 32-разрядное двоичное число, определяющ...
ID 31878
В терминологии сетей TCP/IP маской подсети называется 32-разрядное двоичное число, определяющ...
ID 31879
Если маска подсети 255.255.252.0 и IP-адрес компьютера в сети 226.185.90.162, то номер компьют...
ID 31880
В терминологии сетей TCP/IP маской сети называется двоичное число, определяющее, какая часть I...