№25

Найдите 5 чисел больших 500000, таких, что среди их делителей есть число, оканчивающееся на 8, при этом этот делитель не равен 8 и самому числу. В качестве ответа приведите 5 наименьших чисел, соответствующих условию.
Источник: ссылка

Сперва мы создали функцию, которая ищет в числе первый делитель, оканчивающийся на 8. Так как нам не подходит 8, цикл можно начать с 18-и. Так как поиск мы начинаем с меньшего, то оно уже автоматически будет находиться в порядке возрастания. Из-за того поиск делителя у нас идёт с наименьшего подходящего и в итоге мы возвращаем первый попавшийся, это значит, он и будет минимальным.

Последняя цифра в числе равна остатку от деления этого числа на 10, то есть 108 % 10 = 8. Последние 2 цифры числа соответственно равны остатку от деления его на 100. То есть: сколько нулей в делителе, столько и цифр в конце.
Также цикл for можно было заменить на while. Это уже дело вкуса :)
#Функция для поиска подходящих делителей
def divs(x):
    for i in range(18, x):
        #Делится ли нацело?
        if x % i == 0:
            #Заканчивается ли на 8?
            if i % 10 == 8:
                return i
    #Если подходящих делителей не нашлось,
    #возвращаем 0
    return 0

k = 0
#Перебираем числа большие 500000
for i in range(500001, 10**10):
    div = divs(i)
    #Если делитель не равен 0
    #(то есть он нашёлся)
    if div != 0:
        print(i, div)
        k+=1
        if k == 5:
            break