2013-10-13 8 views
0

Project Euler의 problem 2 (피보나치 시퀀스의 모든 짝수를 최대 4,000,000까지 찾을 수 있음)에 대한 올바른 해결책이라고 생각합니다. 이것은 낮은 수에는 적용되지만 4,000,000으로 실행할 때 충돌이 발생합니다. 나는 이것이 계산적으로 어렵다는 것을 이해하지만, 충돌보다는 오히려 계산하는데 오랜 시간이 걸리지 않아야합니까? 아니면 내 코드에 문제가 있습니까?Project Euler 2 python3

import functools 

def fib(limit): 
    sequence = [] 
    for i in range(limit): 
    if(i < 3): 
     sequence.append(i) 
    else: 
     sequence.append(sequence[i-1] + sequence[i-2]) 
    return sequence 

def add_even(x, y): 
    if(y % 2 == 0): 
     return x + y 
    return x + 0 

print(functools.reduce(add_even,fib(4000000))) 
+0

당신은 longs를 사용해야합니까, 아니면 파이썬에 내장되어 있습니까? – sihrc

+0

당신이 얻은 흔적을 게시하십시오. – interjay

+0

RAM이 부족합니다. – sihrc

답변

3

문제는보다 작은 4000000. 귀하의 코드 대신 처음 4000000 개 피보나치 값을 찾습니다있는 피보나치 수를 얻기에 관하여이다. 피보나치 수는 기하 급수적으로 증가하기 때문에 메모리에 들어가기에는 너무 큰 수에 도달합니다.

당신은 마지막으로 계산 된 값 이상 4000000.

또 다른 가능한 개선 당신이 목록에 저장하는 대신 그들을 계산하는대로 번호를 추가하는 경우 중지 함수를 변경해야

하지만,이 원 적절한 시간에 멈 추면 필요합니다.

+0

이것은 문제이지만, 나는 당신이 너무 비관적이라고 생각합니다. fib (4000000)도 ~ 836000 자릿수 밖에 없기 때문에 숫자를 너무 크게해서 메모리에 저장할 수 없습니다 (몇 개를 저장할 필요가 있기 때문에). 어쨌든 그것이 질문이라면, 그것은 당신이 지적한대로 그렇지 않습니다. : ^) – DSM

+0

고마워, 나는 그 문제를 오해했다. 나는 대답을 얻었다. 그러나, 나는 아직도 나의 프로그램이 심지어 처음 4000000 숫자의 합계를 계산하려고 시도하는 것을 왜 추측하지 못한다. –

관련 문제