Python

Помогите пожалуйста написать полный код!!!

Пусть М(N) - произведение 5 наименьших различных натуральных делителей натурального числа N, не считая единицы. Если у числа N меньше 5 таких делителей, то М(N) считается равным нулю. Найдите 5 наимених натуральных чисел, превышающих 200 000 000, для которых 0 < M (N) < N. В ответе запишите найденные значения М (N) а порядке возрастания соответствующих им чисел N
Числа должны превышать 200 миллионов? Боюсь что Питон от такого с ума сойдет.
Функция же которая возвращает либо произведение пяти наименьших делителей числа не считая единицы либо ноль - пожалте...
Запускаем ее в цикле с этими 200 миллионами и смотрим что получается если конечно произведение делителей, пусть и пяти наименьших, вообще может быть меньше самого числа
МК
Марлен Кабиденов
58 835
Лучший ответ
Марлен Кабиденов В теории должно быть что-то такое как ниже, но как и ожидалось Питон эти 200 миллионов перебирает медленно

Марлен Кабиденов Забыл про увеличение счетчика

(•‿•) Делители натурального числа N, мèньшие этого числа и бòльшие единицы, находятся в цикле от 2 до √N минус единица, вместе с ними сразу же находятся и делители, бòльшие чем √N путём деления числа N на соответствующий мèньший делитель. Если √N - целое число, то оно учитывается только один раз. В общем, нижеприведённая программа работает очень быстро и пять первых чисел с нужным свойством отыскиваются мгновенно, но можно её ускорить и ещё больше, да при этом обойтись лишь одной функцией вместо двух!.
import math
def deli(x):
    y, z = math.ceil(x**0.5), []
    if y * y == x: z.append(y)
    for i in range(2, y):
        if x % i == 0: z.append(i); z.append(x // i)
    return sorted(z)
def M(a):
    if len(a) < 5: return 0
    p = 1
    for i in range(5): p *= a[i]
    return p
k, N = 0, 200000000
while k < 5:
    N += 1
    if 0 < M(deli(N)) < N: print(N); k += 1
input()
Мурат Жанабаев Только вывести надо не сами числа, а произведения им соответствующие.
def f(n):
l = []
i = n - 1
while i > 1:
if n % i == 0:
l += [i]
i -= 1
l = l[::-1][:5]
if (len(l)) < 5 :
return 0
else:
p = 10
for i in l:
p *= i
return p
print(f(100))
i = 460000001
k = 0
while k < 5:
f = []
for d in range(2, int(i**0.5)):
if i % d == 0:
f.append(d)
f.append(i//d)
if len(f) >= 5:
f = sorted(f)
if f[-5] > 0:
print(i, f[-5])
k += 1
i += 1
А вот и решение. Ответ выводится за считанные секунды, python с ума не сходит. Хочу отметить, что ответ получился правильный. На сайте РешуЕГЭ есть такое, правда решено на паскале.