#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