У Вас M и N - какие числа? Вот как будет с натуральными числами и оптимизацией по нахождению количества делителей:
def deli(n):
l, m = 0, int(n**0.5)
for i in range(1, m + 1):
if n % i == 0: l += 2
if m * m == n: l -= 1
return l
while True:
M, N = map(int, input('M N: ').split())
maxi, num = 0, []
for i in range(M, N + 1):
d = deli(i)
if d > maxi: maxi = d; num = [i]
elif d == maxi: num.append(i)
print('Количество делителей:', d)
print(*num)
Как видно, выводятся всё числа диапазона [M;N], для которых количество делителей максимально. Количество делителей каждого натуральное числа i определяется так: в цикле по натуральным числам j от 1 до m=√i включительно проверяется делимость i на j, если i делится на j, то количество делителей увеличивается на 2, в конце цикла проверяется условие m²=i - если имеет место равенство, количество делителей уменьшается на 1. Сложность алгоритма ~ Σ(i=M;N)√i. Для диапазонов [M;N] шириной порядка миллионов и без того оптимизированную программу надо будет оптимизировать ещё больше, иначе будет всё медленно считаться, а безо всякой оптимизации, даже, например, такой простой как у меня, вообще всё начинает виснуть, причём ни при никаких ни при миллионах, а всего лишь при скольких-то там тысячах...
с помощью функций
Если еще через решетки напишете что в строчке происходит - цены Вам не будет