Тема 8. Комбинаторика

8.02 Подсчет количества слов/чисел

Вспоминай формулы по каждой теме
Решай новые задачи каждый день
Вдумчиво разбирай решения
ШКОЛКОВО.
Готовиться с нами - ЛЕГКО!
Подтемы раздела комбинаторика
Решаем задачу:

Ошибка.
Попробуйте повторить позже

Задача 1#85465

Методист составляет для задачи пятизначные числа в четырнадцатиричной системе счисления. Сколько чисел из тех, что он составит, будут делиться на 38?

Показать ответ и решение

Решение руками

Найдем диапазон пятизначных чисел в 14-ричной системе:

Минимальное число = 10000  = 38416
     14       10  .

Максимальное число = DDDDD14   = 53782310  .

Найдём первое и последнее число в диапазоне, делящееся на 38:

Первое число ≥ 38416  , делящееся на 38: 38416 : 38 ≈ 1010.947 → 1011 ⋅38 = 38418  .

Последнее число ≤ 537823  , делящееся на 38: 537823: 38 ≈ 14153.236 → 14153⋅38 = 537814  .

Числа, делящиеся на 38, образуют арифметическую прогрессию: a1 = 38418,an = 537814,d = 38

Количество членов: n = an−a1+ 1 = 537814−38418-+ 1 = 13142+ 1 = 13143
      d            38  .

Идея решения через циклы:

Мы формируем все пятизначные числа в четырнадцатиричной системе счисления, используя цифры "0"–"D". Числа не могут начинаться с нуля. После генерации каждого числа проверяем его делимость на 38 и переводим в 10сс с помощью встроенной функции int(num, 14). Если число делится на 38, оно добавляется в множество count, чтобы исключить повторения. После перебора всех комбинаций выводим количество чисел в множестве.

Решение через циклы:

a = "0123456789ABCD" # Алфавит для 14-ричной системы

count = set() # Множество для хранения допустимых чисел

# Перебор всех пятизначных чисел с ограничением на первую цифру
for x1 in "123456789ABCD": # Первая цифра не может быть "0"
    for x2 in a: # Вторая цифра
        for x3 in a: # Третья цифра
            for x4 in a: # Четвёртая цифра
                for x5 in a: # Пятая цифра
                    s = x1 + x2 + x3 + x4 + x5 # Собираем число
                    # Проверка делимости на 38
                    if int(s, 14) % 38 == 0:
                        count.add(s) # Добавляем число в множество
print(len(count)) # Выводим количество допустимых чисел

Идея решения через itertools:

Для более компактного решения используем функцию product из модуля itertools. Она генерирует все возможные комбинации длины 5 из множества символов "0"–"D". После формирования числа проверяем, что первая цифра не равна 0, и проверяем делимость на 38. Если число удовлетворяет условиям, увеличиваем счётчик cnt. В конце выводим значение счётчика.

Решение через itertools:

from itertools import product # Импортируем функцию product

s = "0123456789ABCD" # Алфавит для 14-ричной системы
cnt = 0 # Счётчик допустимых чисел

# Генерация всех комбинаций длины 5
for k in product(s, repeat=5):
    num = "".join(k) # Преобразуем кортеж в строку
    # Проверка, что первая цифра не равна "0" и число делится на 38
    if num[0] != "0" and int(num, 14) % 38 == 0:
        cnt += 1 # Увеличиваем счётчик
print(cnt) # Выводим количество допустимых чисел

Ответ: 13143

Специальные программы

Все специальные программы

Программа
лояльности v2.0

Приглашай друзей в Школково и получай вознаграждение до 10%!

Крути рулетку
и выигрывай призы!

Крути рулетку и покупай курсы со скидкой, которая привязывается к вашему аккаунту.

Бесплатное онлайн-обучение

Для школьников из приграничных территорий России, проживающих в ДНР, ЛНР, Херсонской, Запорожской, Белгородской, Курской, Брянской областях и Крыму.

Налоговые вычеты

Узнай, как получить налоговый вычет при оплате обучения в «Школково».

Специальное предложение
для учителей

Бесплатный доступ к любому курсу подготовки к ЕГЭ, ОГЭ и олимпиадам от «Школково». Мы с вами делаем общее и важное дело, а потому для нас очень значимо быть чем-то полезными для учителей по всей России!

Вернём деньги за курс
за твою сотку на ЕГЭ

Сдать экзамен на сотку и получить обратно деньги за подготовку теперь вполне реально!

cyberpunkMouse
cyberpunkMouse
Рулетка
Вы можете получить скидку в рулетке!