Я пытаюсь найти самый большой простой коэффициент заданного числа (600851475143) с помощью Python. Я сделал следующий код, но проблема в том, что он берет навсегда, возможно, потому, что он выполняет итерацию по спискам миллионы раз. Как оптимизировать этот процесс?Largest Prime Factor Python
def factors(n):
list = []
i = 1
while i < n:
if n % i == 0:
list.append(i)
i += 1
return list
def prime(n):
list = factors(n)
primelist = []
for item in list[1:]:
if item % 2 != 0 and item % 3 != 0 and item % 4 != 0 and item \
% 5 != 0 and item % 6 != 0 and item % 7 != 0 and item % 8 != 0 \
and item % 9 != 0:
primelist.append(item)
return primelist
def greatestprime(n):
list = prime(n)
list[0] = lnum
i = 1
while i < len(list):
if list[i] > lnum:
lnum = list[i]
return lnum
#print(greatestprime(600851475143))
(Prime) факторизация - * очень сложный * проблема. Это нормально, что это занимает очень много времени, тем более, что вы сначала находите все факторы, а затем отфильтровываете простые числа (и первичная проверка также является очень сложной проблемой). При этом ваша простая проверка номера неверна; вы проверяете только факторы 2-9, которые вообще не соответствуют определению простых чисел. – poke
Возможный дубликат [Поиск наибольшего простого делителя (возможно самая быстрая программа)] (http://stackoverflow.com/questions/20581491/finding-the-greatest-prime-divisor-the-fastest-program-possible) – SzieberthAdam
возможно дубликат [Какой самый быстрый алгоритм для нахождения простых чисел?] (http://stackoverflow.com/questions/453793/which-is-the-fastest-algorithm-to-find-prime-numbers) – fuesika