본문 바로가기

Computer Science/Euler Project

Problem 2: Even Fibonacci numbers

728x90
💡 (프로젝트 오일러 2번문제) 피보나치(Fibonacci) 수열의 각 항은 바로 앞의 항 두개를 더한 것입니다. 1과 2로 시작하는 경우 이 수열은 아래와 같습니다.
1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ...
4백만 이하의 짝수 값을 갖는 모든 피보나치 항을 더하면 얼마가 됩니까?
문제출처: https://euler.synap.co.kr/problem=2

 

Python의 기본 수식인 ‘나머지(%)’ 및 '반복(for문)/조건문(if문)' 활용하기

 

Python에서 기본 수식과 반복구문을 활용하여 푸는 문제이다.

 

피보나치 수열의 첫번째 항과 두번째 항을 초기값으로 입력하여 준 후,

 fibo = [1, 2]
 # 리스트 형식으로 피보나치 수열의 초기변수 설정

 

반복문(for문)을 이용하여 다음 피보나치 수열을 계산하고,

 for i in range(1, 4000000):
 fibo_temp = fibo[i-1] + fibo[i]
 #fibo_temp : 다음 피보나치 수열을 임시로 저장하기 위한 변수
 ...(이하 생략)...

 

조건문(if문)을 이용하여 짝수인 경우 결과값(result 변수)에 더하여 주면 결과 값은 쉽게 도출된다.

 if n % 2 == 0:
 result += n 
 # 나머지를 구하는 수식(%)을 활용하여 짝수인 경우 판별

 

정답은 아래 '더보기'를 클릭!

더보기

Answer: 4613732

 


Code(Python)
#
# Problem 2. Even Fibonacci numbers
# Link : https://projecteuler.net/problem=2
#

# Define 'Cal' function to calculate result value
def Cal():
     fibo = [1, 2] # Set initial Fibonacci numbers
     result = 0
     
     # Loop for get fibonacci numbers
     for i in range(1, 4000000):
          fibo_temp = fibo[i-1] + fibo[i]
          if fibo_temp > 4000000:
               break
          fibo.append(fibo_temp)

     # Add only Even
     for n in fibo:
          if n % 2 == 0:
               result += n
     
     return result

if __name__ == '__main__':
     print(Cal())
728x90