Для справки:Проект Эйлера # 3 в Python
простые множители 13195 являются 5, 7, 13 и 29. Что является самым большим главным фактором числа 600851475143?
Таким образом, я решил третью проблему проекта Эйлера после справедливого размаха. Не самый изящный из кодов, но он в основном работает.
import math
import itertools
def is_prime(x):
# Checks if the factor is prime. If not, breaks and looks at the next one
split_tuple = math.modf(math.sqrt(x))
max_prime_div_possible = int(split_tuple[1])
prime = True
for i in range(2, max_prime_div_possible+1):
if x % i == 0:
prime = False
break
else:
pass
return prime
def factor_me(x):
# Creates a list of all factors of a number
factors = []
split_tuple = math.modf(math.sqrt(x))
max_pf_possible = int(split_tuple[1])
for i in xrange(2, max_pf_possible+1):
if x % i == 0:
factors.append(i)
x = x/i
else:
pass
# Checks each factor for prime-ity, and if it is, sets it as the max prime factor.
for j in factors:
if is_prime(j) == True:
max_prime_factor = j
else:
pass
return max_prime_factor
print factor_me(600851475143) # works correctly
print factor_me(6008514751435) # fails
Дело в том, даже если код работает правильно как с примера теста и предложенной проблемы, если другая цифра добавляется к числу быть разложено, разрывы кода. Чтобы дать пример, чтобы сделать себя понятным, возьмите 6008514751435.
Согласно Wolfram Alpha, этот фактор составляет 5, 7 и 171671850041. Однако, согласно моему коду, наибольшим фактором является 7. Итак, я в тупике. Какие-либо предложения?
Crap, no: Код есть мое решение проблемы №3. Но я имел в виду, что даже при установке n до 6008514751435 код выплевывает 7. Позвольте мне изменить это быстро для ясности. EDIT: Изменено. – matacusa
@matacusa, я тоже ошибся. Я написал '600851475143' вместо' 6008514751435', но квадратный корень и причина сбоя все еще верны. –
Хм, я понимаю сейчас. Однако, если максимальный первичный коэффициент может быть выше квадратного корня из числа, является единственным выбором для принудительного его перебора? Я предполагаю, что для такого большого количества потребуется много времени. – matacusa