Форум сайта python.su
Напишите программу, которая ищет среди целых чисел, принадлежащих числовому отрезку 244143 1367821, числа, имеющие ровно 5 различных делителей. В ответе для каждого найденного числа запишите два его наибольших делителя, не равных самому числу, в порядке возрастания. Я написал вот такую программу. Но ответы, то ли не выводит, то ли долго считает. Напишите плиз где у меня ошибка.Заранее спасибо
a = 244143
b = 1367821
k = 0
for n in range(a, b + 1):
ds = []
for d in range(2, n//2 + 1):
if n % d == 0:
ds.append(d)
if len(ds) > 3:
break
if len(ds) ==3:
print(n,ds[1],ds[2])
Отредактировано Lee (Март 26, 2021 11:07:07)
Офлайн
if len(ds) > 5:
[code python][/code]
Офлайн
Да, моя ошибка, исправил но все равно считает очень долго
Офлайн
Естевенно, давайте еще подумаем
вот вы пишете
if n % d == 0: ds.append(d)
[code python][/code]
Отредактировано PEHDOM (Март 26, 2021 11:53:40)
Офлайн
Можете пожалуйтса изменить мой код и скинуть
Просто когда я написал int(sqrt(n)) +1,то у меня просто начало выводить все числа
Офлайн
from math import sqrt a = 244143 b = 1367821 for n in range(a, b + 1): ds = [] for d in range(2, int(sqrt(n)) + 1): if n % d == 0: ds.append(d) if d != n//d: ds.append(n//d) if len(ds) >= 3: break if len(ds) ==3: ds.sort() print(n, ds[1],ds[2])
from math import sqrt a = 244143 b = 1367821 for n in range(a, b + 1): ds = [] if int(sqrt(n)) == sqrt(n): for d in range(2, int(sqrt(n)) + 1): if n % d == 0: ds.append(d) if d != n//d: ds.append(n//d) if len(ds) >= 3: break if len(ds) ==3: ds.sort() print(n, ds[1],ds[2])
[code python][/code]
Отредактировано PEHDOM (Март 26, 2021 14:06:21)
Офлайн
Спасибо огромное!!!
+rep
Только можете еще раз обьяснить зачем n//d?
Отредактировано Lee (Март 26, 2021 19:40:58)
Офлайн
Leeну смотри, ты перебираешь делитель d от 2 до n. Допустим n у тебя 36, для простоты.
Только можете еще раз обьяснить зачем n//d?
[code python][/code]
Отредактировано PEHDOM (Март 26, 2021 20:17:40)
Офлайн
Спасибо огромное!
Офлайн