2014-11-23 4 views
-4

Это мое решение для Project Euler Problem 3. Я написал этот код для Project Euler, но если я ставлю «49», я получаю «49». В чем проблема?Project Euler # 3 Python

n = 600851475143 
i = 2 

while (i * i < n): 
    while (n % i == 0): 
     n = n/i 
    i = i + 1 

print (n) 
+0

Где вы размещаете «49»? – irrelephant

+1

Я не знаю, что такое 'Project Euler # 3'. Я знаю, что могу проверить это, но это должно быть под вопросом! – Tacet

+0

Я голосую, чтобы закрыть этот вопрос как не по теме, потому что Project Euler специально просит людей не публиковать ответы на свои вопросы в Интернете. Для StackOverflow было бы плохой способ уничтожить их веб-сайт, опубликовав ответы на все их вопросы. – theJollySin

ответ

1

Я предполагаю, что вы имели в виду установить n = 49.

Ваш внешний контур, а проверяет состояние i * i < n, которое не так для i == 7, поэтому разрывы внешнего цикла, как только она попадает 7. Измените < на <=.

Однако, ваш код не является правильным в первую очередь - возможно, что-то вроде этого, что вы имели в виду?

n = 600851475143 
i = 2 
factors = [] 

while (i <= n): 
    while (n % i == 0): 
     n = n/i 
     factors.append(i) 
    i = i + 1 

print factors 
+0

Это неправильно. 'i' становится' 7', когда оно 'i * i Dair

+0

Хотя его реализация недостаточно быстро для реальной проблемы, его проблема для случая '49' заключается в том, что он печатает в конце' n' вместо 'i'. – Dair

+0

@ Печатная версия 'i' не печатает самый большой первичный коэффициент - попробуйте исходный код с' n = 15'. Конечно, ответ «5», но «я» равен 4. – kevinsa5

1

Вы печати n вы хотите напечатать i ...

0

ваш код написан предполагая, что более одного фактора, но и в случае п = 49, то получится, что у него есть только один фактор, который 7, так что вы можете добавить проверку строки, что делает он имеет более одного фактора, если не тогда, я должен быть напечатан

0

Возможно, это самый быстрый способ решить его, найдя все первичные факторы, а затем верните макс.

Решение грубой силы заняло у меня менее 1 сек.