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

Функция же которая возвращает либо произведение пяти наименьших делителей числа не считая единицы либо ноль - пожалте...
Запускаем ее в цикле с этими 200 миллионами и смотрим что получается если конечно произведение делителей, пусть и пяти наименьших, вообще может быть меньше самого числа

Марлен Кабиденов
В теории должно быть что-то такое как ниже, но как и ожидалось Питон эти 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()

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))

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
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 с ума не сходит. Хочу отметить, что ответ получился правильный. На сайте РешуЕГЭ есть такое, правда решено на паскале.


Похожие вопросы
- Помогите пожалуйста написать код
- Помогите пожалуйста соединить два кода в один,очень долго пытался,но всё равно не совсем правильно получается
- Добрый день, помогите, пожалуйста, написать код к задаче на питоне
- Помогите пожалуйста исправить мой код на языке питон
- Помогите пожалуйста написать скрипт на языке Python 3
- Помогите пожалуйста написать 2 программы на Python
- Помогите, пожалуйста, написать программу
- Написать код, прошу помогите пожалуйста на python
- НАПИШИТЕ СРОЧНО КОД НА PYTHON!
- Питон 3 напишите часть кода!!