Предмет: Информатика, автор: ruslanorazayevich

что не так с моим кодом? разберите его
Я его делал к заданию:Каков самый большой делитель числа 600851475143, являющийся простым числом?

d=1
a=194
i=1
for i in range(2, a//2+1):
if (a%i==0) and (d<i):
d=i
i=i+1
continue
print(d)


ruslanorazayevich: это Python
ruslanorazayevich: Он работает, но на больших числах не выводит ответ, что делать?
ruslanorazayevich: Попробуйте на вашем idl или редакторе может у вас ответ выведиться просто я пишу на телефоне, может производительности не хватает?
ruslanorazayevich: А ну да он не работает:я ввел 388 вышло 194 , 194-непростое число
ruslanorazayevich: в чем проблема?
ruslanorazayevich: я там забыл поставить вместо 194 60085147143(число из вопроса) я просто проверял код, а если даже его подставить туда все равно ответа не будет, в чем проблема?
p15: На текущий момент это лучшее решение.

Ответы

Автор ответа: p15
2

Ответ:

Это четвертая версия кода. Еще быстрее. Можно поиграться и с большими числами, например 600851475143777, но некоторые простые большие может искать долго.

n=600851475143777

md=0

i=3

while i<n:

   while not(n%i):

       n=n//i

       md=i

   i+=2

print (md) if n<md else print (n)

Например в 600851475143777 есть в множителях 11, 13, 41, 28871, 3549649.

Объяснение:


iramazurk: Нет слов
p15: Последняя строка можно просто print (n)
p15: и n>2 должно быть (но это думаю будет всегда в этой задаче)
p15: и нечетное
p15: Нечетное тоже понятно - иначе можно поделить на 2. Можно конечно это подготавливать (делить на 2 пока не станет нечетным)
p15: нет. последнюю строчку надо оставить как в ответе.
iramazurk: Мне это не дано понять)
Похожие вопросы
Предмет: Английский язык, автор: Софья019284
Предмет: История, автор: Valeria205