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

В тер­ми­но­ло­гии сетей 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)

Источник: Проб­ный ЕГЭ Санкт-Пе­тер­бург, 20.02.2025. Ва­ри­ант 2