Условие:
Реши задачу сначала аналитически, затем на языке пайтон. В терминологии сетей TCP/IP маской сети называют двоичное число, которое показывает, какая часть IP-адреса узла сети относится к адресу сети, а какая – к адресу узла в этой сети. Адрес сети получается в результате применения поразрядной конъюнкции к заданному адресу узла и маске сети. Сеть задана IP-адресом 112.160.0.0 и сетевой маской 255.240.0.0. Сколько в этой сети IP-адресов, для которых количество единиц в двоичной записи IP-адреса не кратно 3?
Решение:
Нам дано, что сеть имеет адрес 112.160.0.0 и маску 255.240.0.0. При этом по определению маски сети, первые (соответствующие единицам в маске) бит IP-адреса являются фиксированными (адрес сети), а оставшиеся – могут принимать любые значения (адреса узлов). Далее требуется найти число таких IP-адресов в этой сети, у которых общее число единиц в двоичной записи (то есть в 32‑битном числе) не делится на 3. Мы решим задачу поэтапно: ───────────────────────────── 1. Аналитическое решение A. Определение количества адресов в сети Маска 255.240.0.0 в двоичном виде выглядит так: 255 = 11111111 ...
total = 2**20 S1 = 0 for x in range(21): # x = 0, 1, …, 20 if x % 3 == 1: S1 += math.comb(20, x) result = total - S1 print(Искомое количество IP-адресов:, result) ------------------------------------------------- При запуске данный скрипт выведет: Искомое количество IP-адресов: 699050 ───────────────────────────── Вывод В заданной сети с адресом 112.160.0.0/12 число таких IP-адресов, у которых количество единиц в двоичной записи не делится на 3, равно 699 050.