#1-27 номера ЕГЭ по информатике
March 12, 2023
Разбор теории для 2️⃣5️⃣-го номера ЕГЭ по информатике 2023 года
Тип 25 № 37130
Напишите программу, которая перебирает целые числа, большие 600 000 в порядке возрастания и ищет среди них такие, среди делителей которых есть хотя бы одно число, оканчивающееся на 7, но не равное 7 и самому числу. Выведите первые 5 таких чисел, и наименьший делитель, оканчивающийся на 7, не равный 7 и самому числу.
Формат вывода: для каждого из 5 таких найденных чисел в отдельной строке сначала выводится само число, затем — наименьший делитель, оканчивающийся на 7, не равный 7 и самому числу. Строки выводятся в порядке возрастания найденных чисел.
Количество строк в таблице для ответа избыточно.
Комментарии к первому варианту решения задачи:
- создаем функцию для получения делителей числа
x
- создаем пустое множество для хранения делителей
- проходим циклом от
2
до корняx
(исключаем единицы и сами числа) - проверяем, является ли
j
делителемx
и не равен ли он7
- проверяем, заканчивается ли
j
на7
- добавляем
j
в множество делителей - проверяем, заканчивается ли
x // j
на7
- добавляем
x // j
в множество делителей - возвращаем отсортированный список делителей
- создаем переменную для подсчета количества найденных чисел
- проходим циклом от
600001
до999999
(любого большого числа) - получаем список делителей числа
x
- если список делителей не пустой
- находим минимальный делитель
- выводим числа
x
и минимальный делитель - увеличиваем счетчик на
1
- если нашли
5
чисел - завершаем цикл
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