#1-27 номера ЕГЭ по информатике
March 12, 2023

Разбор теории для 2️⃣5️⃣-го номера ЕГЭ по информатике 2023 года  

Тип 25 № 37130

Напишите программу, которая перебирает целые числа, большие 600 000 в порядке возрастания и ищет среди них такие, среди делителей которых есть хотя бы одно число, оканчивающееся на 7, но не равное 7 и самому числу. Выведите первые 5 таких чисел, и наименьший делитель, оканчивающийся на 7, не равный 7 и самому числу.

Формат вывода: для каждого из 5 таких найденных чисел в отдельной строке сначала выводится само число, затем — наименьший делитель, оканчивающийся на 7, не равный 7 и самому числу. Строки выводятся в порядке возрастания найденных чисел.

Количество строк в таблице для ответа избыточно.

Вариант 1 решения задания через функцию поиска делителей числа

Комментарии к первому варианту решения задачи:

  1. создаем функцию для получения делителей числа x
  2. создаем пустое множество для хранения делителей
  3. проходим циклом от 2 до корня x (исключаем единицы и сами числа)
  4. проверяем, является ли j делителем x и не равен ли он 7
  5. проверяем, заканчивается ли j на 7
  6. добавляем j в множество делителей
  7. проверяем, заканчивается ли x // j на 7
  8. добавляем x // j в множество делителей
  9. возвращаем отсортированный список делителей
  10. создаем переменную для подсчета количества найденных чисел
  11. проходим циклом от 600001 до 999999 (любого большого числа)
  12. получаем список делителей числа x
  13. если список делителей не пустой
  14. находим минимальный делитель
  15. выводим числа x и минимальный делитель
  16. увеличиваем счетчик на 1
  17. если нашли 5 чисел
  18. завершаем цикл
def get_divisible_numbers(x):
    divisors = set()
    for j in range(2, int(x ** 0.5) + 1):
        if x % j == 0 and j != 7:
            if j % 10 == 7:
                divisors.add(j)
            if x // j % 10 == 7:
                divisors.add(x // j)
    return sorted(divisors)

count = 0
for x in range(600_001, 1_000_000):
    divisors = get_divisible_numbers(x)
    if len(divisors) > 0:
        min_divisor = min(divisors)
        print(x, min_divisor)
        count += 1
        if count == 5:
            break

Ответ:

600001 437 600002 47 600003 1227 600005 217 600012 16667