Задания
Версия для печати и копирования в MS Word
Тип 13 № 76681
i

В тер­ми­но­ло­гии сетей TCP⁠/⁠IP мас­кой сети на­зы­ва­ет­ся дво­ич­ное число, опре­де­ля­ю­щее, какая часть IP⁠-⁠ад­ре­са узла сети от­но­сит­ся к ад­ре­су сети, а какая  — к ад­ре­су са­мо­го узла в этой сети. При этом в маске сна­ча­ла (в стар­ших раз­ря­дах) стоят еди­ни­цы, а затем с не­ко­то­ро­го места  — нули.

Адрес сети по­лу­ча­ет­ся в ре­зуль­та­те при­ме­не­ния по­раз­ряд­ной конъ­юнк­ции к за­дан­но­му IP⁠-⁠ад­ре­су узла и маске.

На­при­мер, если IP⁠-⁠адрес узла равен 231.32.255.131, а маска равна 255.255.240.0, то адрес сети равен 231.32.240.0.

Из­вест­но, что для узла 129.0.2.176 ко­ли­че­ство еди­ниц в дво­ич­ной за­пи­си ад­ре­са сети равно ко­ли­че­ству еди­ниц в дво­ич­ной за­пи­си но­ме­ра узла в пре­де­лах сети.

Какое наи­боль­шее число узлов, ад­ре­са ко­то­рых об­ла­да­ют тем же свой­ством (вклю­чая уже на­зван­ный), может быть в этой сети?

Спрятать решение

Ре­ше­ние.

При­ведём ре­ше­ние на языке Python.

from math import *

for i in range(32):

ip = (129 << 24) | (0 << 16) | (2 << 8) | (176 << 0)

mask = (2**i - 1) << (32 - i)

if f'{ip & mask:b}'.count('1') == f'{ip & (2**(32 - i) - 1):b}'.count('1'):

print(comb(32 - i, f'{ip & mask:b}'.count('1')))

 

 

Ответ: 84.