출처 : 프로젝트 오일러 2번문제, 한글 번역판
피보나치 수열의 각 항은 바로 앞의 항 두 개를 더한 것이 됩니다. 1과 2로 시작하는 경우 이 수열은 아래와 같습니다.
1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ...
짝수이면서 4백만 이하인 모든 항을 더하면 얼마가 됩니까?
239개의 풀이가 있습니다.
발반따빠따빠뿌다뿌오
분섟어떠떠떠범속분오
삭반삮붇ㅇ아우쏙라초
싺삮다뿌아초아뽀쑧뻐
뽀석ㅇ반로뿌오섞숛ㅇ
해초정ㅇㅇ싻삯도다숙
몽섟오어서써석뻐서뻐
아희로 작성했습니다.
아희는 befunge와 비슷한 한글로 쓰여진 난해한 프로그래밍 언어입니다.
[아희돌그만둘래 프로그래밍 언어 설명 문서 - 버전 1.0.0]
#include <iostream>
#define print(A) std::cout << A << std::endl
typedef unsigned long long u2long;
template <u2long N>
struct fib
{static const u2long value = fib<N-1>::value + fib<N-2>::value;};
template <>
struct fib<1>
{static const u2long value = 1;};
template <>
struct fib<2>
{static const u2long value = 1;};
template <u2long N>
struct is_even
{static const bool result = (N % 2 == 0);};
template <>
struct is_even<0>
{static const int result = -1;};
template<u2long N, u2long aim>
struct is_not_exceed
{static const bool result = (N <= aim);};
template<u2long N, u2long aim>
struct correctfib
{static const u2long value = fib<N>::value * is_even<fib<N>::value>::result * is_not_exceed<fib<N>::value,aim>::result;};
template<u2long N, u2long aim>
struct correctfibsum
{static const u2long value = correctfib<N,aim>::value + correctfibsum<N-1,aim>::value;};
template<>
struct correctfibsum<1,4000000>
{static const u2long value = 0;};
int main()
{
unsigned long long result = correctfibsum<33,4000000>::value;
print(result);
}
보너스로 겉핧기식으로 배운 템플릿 메타프로그래밍을 사용해봤습니다. 이거 진짜 어렵네요
public static void main(String[] args) {
ArrayList<Integer> list = new ArrayList<>();
list.add(1);
list.add(2);
for(int i=1;;i++){//피보나치 수열을 list에 저장 list에 들어간 값이 400만을 넘으면 멈춤
list.add(list.get(i-1)+list.get(i));
if(list.get(i-1)+list.get(i)>4000000)
break;
}
list.remove(list.get(list.size()-1));//list에 마지막 인덱스 값을 제거(400만 넘으니깐)
int sum=0;
for(int i=0;i<list.size();i++){//짝수인 총합
if(list.get(i)%2==0)
sum+=list.get(i);
}
System.out.println(sum);
}
답은 4613732
x = 0
y = 1
s = 0
while y < 40000001:
x = x + y
y, x = x, y
if y % 2 == 0: s += y
print(s)
파이썬으로 하였습니다.
python 3.6
def fibonacci_evn_sum(n):
f, f_evn_sum = [0,1], 0
while f[-2]+f[-1] < n:
if (f[-2]+f[-1]) % 2 == 0: f_evn_sum += f[-2]+f[-1]
f.append(f[-2]+f[-1])
return f_evn_sum
>>> fibonacci_evn_sum(4000000)
4613732
Python입니다.
>>> fib = [1, 2]
>>> while fib[-1] <= 4000000:
... fib = fib + [sum(fib[-2:])]
...
>>> fib[:10]
[1, 2, 3, 5, 8, 13, 21, 34, 55, 89]
>>> sum([t for t in fib if t % 2 == 0])
4613732
Ruby
fib = Hash.new {|h,n| h[n] = n < 2 ? n : h[n-1] + h[n-2] }
fib_sum = ->limit { (1..Float::INFINITY).lazy.map(&fib).
select(&:even?).take_while{|n| n < limit}.sum }
Test
expect( fib_sum[4_000_000] ).to eq 4613732
// 짝수 피보나치의 합 - C#
using System;
namespace EvenFibo
{
class Program
{
static int Fibonacci(int n)
{
if (n < 2)
return n;
else
{
int temp, t1 = 1, t2 = 0;
for (int i = 2; i <= n; i++)
{
temp = t1;
t1 += t2;
t2 = temp;
}
return t1;
}
}
static void Main(string[] args)
{
int finalsum = 0, i = 0;
while(true)
{
int fib = Fibonacci(i);
if (fib > 4000000)
break;
if (fib % 2 == 0)
finalsum += fib;
i++;
}
Console.WriteLine(finalsum);
// 답은 4613732
}
}
}
using System;
namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{
int result = 0;
int cur_fibo = 1;
int prev_fibo = 0;
int even_sum = 0;
while(cur_fibo <= 4000000)
{
result = cur_fibo + prev_fibo; // 현재의 값과 전의 값을 더한 것이 다음 나올 숫자
prev_fibo = cur_fibo; // 현재의 값은 전의 값으로 이동
cur_fibo = result; // 다음에 나올 숫자를 현재의 값으로 이동
Console.Write(result + " "); // 400만 이하의 피보나치 수열을 출력한다.
if (result%2==0) // 피보나치 수열 중에 짝의 합만 더하는 부분
{
even_sum += result;
}
}
Console.WriteLine();
Console.WriteLine("400만 이하의 짝수의 합 : " + even_sum);
}
}
}
#include <stdio.h>
int main()
{
int a = 1, b = 2, c, d, e = 0;
for (; a <= 4000000;)
{
if (a % 2 == 0)
{
e = e + a;
}
c = a + b;
a = b;
b = c;
}
printf("%d", e);
return 0;
}
javascript
var fibonacci = (function(n) {
var cache = [0, 1, 2];
return function fib(i) {
return cache[i] ? cache[i] : cache[i] = fib(i - 1) + fib(i - 2);
}
})();
var res = 0,
sum = 0;
for (let i = 1; (res = fibonacci(i)) <= 4000000; i++) {
if (res % 2 === 0) {
sum += res;
}
}
console.log(sum);
>>> 4613732
파이썬 3.6입니다.
def fib():
a, b = 1, 1
while True:
yield b
a, b = b, a + b
def main():
g, s = fib(), 0
for i in g:
if i > 4000000:
break
elif i % 2 == 0:
s += 1
print(s)
c로 풀었습니다.
#include <stdio.h>
int main(int argc, const char * argv[]) {
int frst = 1;
int scnd = 2;
int total = frst + scnd;
int currNum = frst + scnd;
int temp = 0;
while (currNum <= 4000000) {
if (currNum % 2 == 0) {
total += currNum;
printf("The current number is %d\n", currNum);
}
temp = currNum;
currNum += scnd;
scnd = temp;
}
printf("The total is: %d\n", total);
return 0;
/*
실행결과:
The current number is 8
The current number is 34
The current number is 144
The current number is 610
The current number is 2584
The current number is 10946
The current number is 46368
The current number is 196418
The current number is 832040
The current number is 3524578
The total is: 4613733
*/
}
python을 이용하여 풀이하였습니다.
class Fibonacci:
def Limit(self, limit):
self.limit = limit
def Fib(self):
a, b = 1, 2
list = [a, b]
while a < self.limit:
list.append(a + b)
a, b = b, a + b
print sum([num for num in list if num % 2 == 0])
Result = Fibonacci()
Result.Limit(4000000)
Result.Fib()
결과 4613732
#include <stdio.h>
int main()
{
int a=1,b=2;
long long sum=0;
while(a<=4000000)
{
if(!(a&1)) sum+=a;
b=a+b;
a=b-a;
}
printf("%lld\n",sum);
return 0;
}
// 1 2 3 5 8 13 21
fibonacci = [1,2]
while fibonacci[-1] < 4000000:
fibonacci.append(fibonacci[-1]+fibonacci[-2])
evenFibonacci = [x for x in fibonacci if x%2 == 0]
print('400만보다 작은 짝수의 합: ',sum(evenFibonacci))
Python3 입니다. 답은 4613732
4백만이 어디까지인지는 for을 사용해서 직접 구했습니다. 자바로 작성한 다른분의 코드를 보니 이렇게 작성하는건 연산이 더 많이 일어나서 비효율적일것 같네요 ㅎㅎ
public class Main {
public static void main(String[] args) {
long sum = 0;
for(int i=1;i<33;i++)
{
if(pibo(i)%2==0) {
sum += pibo(i);
}
}
System.out.println(sum);
}
public static long pibo(int n) {
if(n==1) {
return 1;
}
else if(n==2) {
return 2;
}
else if(n>2) {
return pibo(n-1)+pibo(n-2);
}
return 0;
}
}
def fibo_even_sum(max_num):
fibonacci_num = [1,2]
even_sum = 0
for i in range (0,max_num):
if (fibonacci_num[i]+fibonacci_num[i+1])<max_num:
fibonacci_num.append(fibonacci_num[i]+fibonacci_num[i+1])
else:
break
for i in fibonacci_num:
if i%2==0:
even_sum = even_sum + i
return even_sum
print("sum even of fibonacci :",fibo_even_sum(4000000))
fibonacci = [1,2]
a=0; b=1; c=0
while(1):
c = fibonacci[a] + fibonacci[b]
if c < 4000000 :
fibonacci.append(c)
a+=1; b+=1;
else :
break
#홀수 + 짝수 = 홀수, 짝수 + 홀수 = 홀수, 홀수 + 홀수 = 짝수, 홀수 + 짝수 = 홀수.
#이런 순서로 나아가므로 짝수는 1, 4, 7, ... 와 같이 이루어져있다.
b=1; c=0
while(b < len(fibonacci)):
c+=fibonacci[b]
b+=3
print(c)
limit=4000000
def fib(n):
if n<=2:
return 1
else:
return fib(n-1)+fib(n-2)
i=1
s=[]
while fib(i)<=limit:
if fib(i)%2==0:
s.append(fib(i))
i=i+1
print(sum(s))
Python으로 간단히 풀어봤습니다. Fibonacci 수열을 생성하는 Generator를 정의하고, max(=4000000)까지의 합을 구했습니다.
def solve(max_val):
def fib(limit):
a = [1,1]
while a[1] < limit:
yield a[1]
a.reverse()
a[1] += a[0]
return sum(x for x in fib(max_val) if x % 2 == 0)
print(solve(4000000))
sum = 0
t1, t2 = 1, 2
while t2 < 4000000:
t1, t2 = t2, t1+t2
if t1 % 2 == 0:
sum += t1
print(sum) #4613732
def fib(a = 1, b = 1):
while b <= 4000000:
yield b
a, b = b, a+b
if __name__ == '__main__':
print(sum(x for x in fib() if x%2 == 0)
파이썬 3.6.1 64
import java.math.BigInteger;
import java.util.stream.Stream;
public class EvenFibonacciNumbers {
public static void main(String[] args) {
System.out.println(
Stream.iterate(new BigInteger[]{BigInteger.ONE, BigInteger.ONE}, p -> new BigInteger[]{p[1], p[0].add(p[1])})
.limit(100)
.filter(p -> p[1].mod(BigInteger.valueOf(2)).compareTo(BigInteger.ZERO) == 0)
.filter(p -> p[1].compareTo(BigInteger.valueOf(4000000L)) < 0)
.map(p -> p[1].intValue()).reduce((a, b) -> a + b).get()
);
}
}
public class Fibonacci {
public static void main(String[] args){
/*
* 홀 - 홀 - 짝 - 홀 - 홀 - 짝 - 홀 - 홀 - 짝 - 홀 - 홀 - 짝
* 1 1 2 3 5 8 13 21 34 55 89 144
* 1, 1, 2로 시작한다고 문제를 변형한다면 3n 번째 마다 짝수가 온다.
*/
int first = 1; //첫번째 홀수
int second = 1; //두번쨰 홀수
int evenfib=2; //짝
int sum=0; //합
while(evenfib<=4000000){
sum+=evenfib;
first=second+evenfib; //2번째+3번째=4번째
second=evenfib+first; //3번째+4번째=5번째
evenfib=first+second; //4번째+5번째=6번째
}
System.out.println(sum);
}
}
def fib(a, b, c=2):
while c<=4000000:
yield c
a, b, c = b+c, b+2*c, 2*b+3*c;
print(sum(i for i in fib(1, 1)))
fibo = [1,2]
while(1):
fibo.append(fibo[-1]+fibo[-2])
if fibo[-1]>4000000:
fibo.pop()
print(sum([i for i in fibo if i%2==0]))
break
#fibonacci222.py
def fib(n):
if n==0:return 0
if n==1:return 1
return fib(n-2)+fib(n-1)
total=0
x=int(input("숫자 입력:")) # x값에 4백만을 넣으면 됩니다!
i=0
while fib(i)<=x:
i = i + 1
if fib(i)%2==0:
total=total+fib(i)
else:continue
print(total)
파이썬 3입니다 피보나치 수열 일반항을 알아서 그냥 넣었어요
from math import sqrt as s
n = 1
res = 0
p = 0
while p < 4000000:
p = int (( 1 / ( s(5) ) ) * ( ( (1 + s(5) ) /2 ) ** n - ( ( 1 - s(5) ) /2 ) ** n ))
n += 1
if p % 2 == 0:
res += p
print(res)
res = 0
a = 1
b = 2
while b < 4000000:
if b % 2 == 0:
res += b
a += b
a, b = b, a
#include <stdio.h>
int main(void) {
int p = 0, v = 1, tmp, sum = 0;
while(1) {
tmp = p + v;
if(tmp > 4000000) {
break;
}
sum += (tmp % 2 == 0) ? tmp : 0;
p = v;
v = tmp;
}
printf("%d", sum);
}
답은 4613732 네요
#include<stdio.h>
#define RAN 4000000
int Fibo(int num){
if(num==1)
return 1;
if(num==2)
return 2;
return Fibo(num-1) + Fibo(num-2);
}
int main(void){
int i;
int res=0;
for(i=1; Fibo(i)<RAN; i++)
if(Fibo(i)%2==0)
res += Fibo(i);
printf("%d \n", res);
return 0;
}
a = 1 b = 2 c = 3 sum = 2
print (a)
while c<=4000000: print (b) c = b + a if c%2 == 0 : sum = sum + c
a = b
b = c
print ('================')
print (sum)
# Python 3.6
x, y, sum = 1, 2, 0
while y <= 4000000:
if not y % 2: sum += y
x, y = y, x + y
print(sum) # 4613732
//c로 작성, 피보나치의 짝수 계산
#include <stdio.h>
int main(void)
{
int a = 1, b = 2, c = 0;
unsigned int result = 0;
for (; a <= 4000000;)
{
if (a % 2 == 0)
result += a;
c = a + b;
a = b;
b = c;
}
printf("%d\n", result);
return 0;
}
using System;
using System.Collections;
using System.Collections.Generic;
namespace ConsoleApp3
{
class Program
{
static void Main(string[] args)
{
List<int> numbers = new List<int>();
int sum = 0;
numbers.Add(1);
numbers.Add(2);
int count = 0;
while (true)
{
sum = numbers[count] + numbers[count + 1];
if (sum > 4000000) { break; }
numbers.Add(sum);
count++;
}
for (int i = 0; i <= count + 1; i++)
{
Console.Write(numbers[i] + " ");
}
sum = 0;
for (int i = 0; i <= count + 1; i++)
{
if ((numbers[i] % 2).Equals(0))
{
sum += numbers[i];
}
}
Console.WriteLine(sum);
}
}
}
public class Ex9 {
private final static int MAX = 4000000;
public static void main(String[] args) {
int n = 1;
int m = 2;
int tmp = 0;
int sum = m;
while ( n + m <= MAX ){
if ( ( n + m ) % 2 == 0 ){
sum += n + m;
}
tmp = m;
m = n + m;
n = tmp;
}
System.out.println(sum);
}
}
import numpy as np
Fibonacci_under_4M = [1,2]
num = np.sum(Fibonacci_under_4M[-2:])
while num < 4000000:
Fibonacci_under_4M.append(num)
num = np.sum(Fibonacci_under_4M[-2:])
Fib_even = []
for i in Fibonacci_under_4M:
if i % 2 == 0:
Fib_even.append(i)
else :
continue
print(np.sum(Fib_even))
numbers = [1, 2]
result = 0
while True :
result = numbers[len(numbers)-2] + numbers[len(numbers)-1]
if result > 4000000 :
break
numbers.append(result)
print(numbers)
final = 0
for i in numbers :
if i % 2 == 0 :
#n = numbers.pop(numbers.index(i))
final += i
print(final)
public class evenFibonaccinumBers {
public static void main(String[] args) {
int fibonacci1=1, fibonacci2=2, fibonacci3;
int sum = 2;
for(int i=0; ;i++) {
fibonacci3 = fibonacci1 + fibonacci2;
if(fibonacci3 > 4000000) {
break;
}
if((fibonacci3%2) == 0) {
sum += fibonacci3;
}
fibonacci1 = fibonacci2;
fibonacci2 = fibonacci3;
}
System.out.println(sum);
}
}
```{.java} public class Main {
public static void main(String[] args) {
int a = 1;
int b = 2;
int sum = 0;
int total = 2;
int max = 4000000;
while (sum <= max) {
sum = a + b;
a = b;
b = sum;
if (sum % 2 == 0) {
total += sum;
}
}
System.out.println(total);
}
} 답: 4613732
Python으로 작성했습니다.
def EvenFibonacci(num):
temp = [0, 1]
ans, result, idx = 0, 0, 0
while result < num:
result = temp[idx] + temp[idx + 1]
temp.append(result)
if result % 2 == 0:
ans = ans + result
idx+=1
print(ans)
EvenFibonacci(4000000)
R로 작성했습니다.
EvenFibonacci <- function(num){
num = 4000000
temp <- c(0, 1)
idx <- 1
ans <- result <- 0
while(result < num){
result <- temp[idx] + temp[idx + 1]
temp[idx + 2] <- result
idx <- idx + 1
if(result %% 2 == 0) ans = ans + result
}
return(ans)
}
EvenFibonacci(4000000)
public class Even_Fibonacci_Numbers2 {
public static void main(String[] args) {
int sum = 0; //피보나치 수 중 짝수값 합계 저장
int idx = 0;
int evenIdx = 0;
int num1 = 1; //피보나치 앞쪽 수
System.out.println("피보나치 수(" + ++idx + "번째): " + num1);
if (num1 % 2 == 0) { //짝수여부 확인
sum += num1;
System.out.println("400만 이하의 피보나치 수열 값 중 짝수 값(" + ++evenIdx + "번째): " + num1);
System.out.println("400만 이하의 피보나치 수열 값 중 짝수 값 합계: " + sum);
}
int num2 = 2; //피보나치 뒷쪽 수
System.out.println("피보나치 수(" + ++idx + "번째): " + num2);
if (num2 % 2 == 0) { //짝수여부 확인
sum += num2;
System.out.println("400만 이하의 피보나치 수열 값 중 짝수 값(" + ++evenIdx + "번째): " + num2);
System.out.println("400만 이하의 피보나치 수열 값 중 짝수 값 합계: " + sum);
}
int num3 = num1 + num2; //새로운 피보나치 수 : 앞쪽 수 + 뒷쪽 수
System.out.println("피보나치 수(" + ++idx + "번째): " + num3);
if (num3 % 2 == 0) { //짝수여부 확인
sum += num3;
System.out.println("400만 이하의 피보나치 수열 값 중 짝수 값(" + ++evenIdx + "번째): " + num3);
System.out.println("400만 이하의 피보나치 수열 값 중 짝수 값 합계: " + sum);
}
while (true) {
num1 = num2;
num2 = num3;
num3 = num1 + num2;
if (num3 > 4000000) {
System.out.println(">>> 400만을 넘는 첫번째 피보나치 수(" + ++idx + "번째): " + num3);
break; //피보나치 수가 400만을 넘으면 반복 종료
}
System.out.println("피보나치 수(" + ++idx + "번째): " + num3); //피보나치 수열 출력
if (num3 % 2 == 0) { //짝수여부 확인
sum += num3;
System.out.println("400만 이하의 피보나치 수열 값 중 짝수 값(" + ++evenIdx + "번째): " + num3);
System.out.println("400만 이하의 피보나치 수열 값 중 짝수 값 합계: " + sum);
}
}
System.out.println("-------------------------------------------------");
System.out.println("400만 이하의 피보나치 수열 값 중 짝수 합계(최종): " + sum);
}
}
/* 실행결과
피보나치 수(1번째): 1
피보나치 수(2번째): 2
400만 이하의 피보나치 수열 값 중 짝수 값(1번째): 2
400만 이하의 피보나치 수열 값 중 짝수 값 합계: 2
피보나치 수(3번째): 3
피보나치 수(4번째): 5
피보나치 수(5번째): 8
400만 이하의 피보나치 수열 값 중 짝수 값(2번째): 8
400만 이하의 피보나치 수열 값 중 짝수 값 합계: 10
피보나치 수(6번째): 13
피보나치 수(7번째): 21
피보나치 수(8번째): 34
400만 이하의 피보나치 수열 값 중 짝수 값(3번째): 34
400만 이하의 피보나치 수열 값 중 짝수 값 합계: 44
피보나치 수(9번째): 55
피보나치 수(10번째): 89
피보나치 수(11번째): 144
400만 이하의 피보나치 수열 값 중 짝수 값(4번째): 144
400만 이하의 피보나치 수열 값 중 짝수 값 합계: 188
피보나치 수(12번째): 233
피보나치 수(13번째): 377
피보나치 수(14번째): 610
400만 이하의 피보나치 수열 값 중 짝수 값(5번째): 610
400만 이하의 피보나치 수열 값 중 짝수 값 합계: 798
피보나치 수(15번째): 987
피보나치 수(16번째): 1597
피보나치 수(17번째): 2584
400만 이하의 피보나치 수열 값 중 짝수 값(6번째): 2584
400만 이하의 피보나치 수열 값 중 짝수 값 합계: 3382
피보나치 수(18번째): 4181
피보나치 수(19번째): 6765
피보나치 수(20번째): 10946
400만 이하의 피보나치 수열 값 중 짝수 값(7번째): 10946
400만 이하의 피보나치 수열 값 중 짝수 값 합계: 14328
피보나치 수(21번째): 17711
피보나치 수(22번째): 28657
피보나치 수(23번째): 46368
400만 이하의 피보나치 수열 값 중 짝수 값(8번째): 46368
400만 이하의 피보나치 수열 값 중 짝수 값 합계: 60696
피보나치 수(24번째): 75025
피보나치 수(25번째): 121393
피보나치 수(26번째): 196418
400만 이하의 피보나치 수열 값 중 짝수 값(9번째): 196418
400만 이하의 피보나치 수열 값 중 짝수 값 합계: 257114
피보나치 수(27번째): 317811
피보나치 수(28번째): 514229
피보나치 수(29번째): 832040
400만 이하의 피보나치 수열 값 중 짝수 값(10번째): 832040
400만 이하의 피보나치 수열 값 중 짝수 값 합계: 1089154
피보나치 수(30번째): 1346269
피보나치 수(31번째): 2178309
피보나치 수(32번째): 3524578
400만 이하의 피보나치 수열 값 중 짝수 값(11번째): 3524578
400만 이하의 피보나치 수열 값 중 짝수 값 합계: 4613732
>>> 400만을 넘는 첫번째 피보나치 수(33번째): 5702887
-------------------------------------------------
400만 이하의 피보나치 수열 값 중 짝수 합계(최종): 4613732
*/
import numpy as np
Fibo = [1,2]
ans = [2]
f = 0
if __name__=="__main__":
while f < 4000000:
k = len(Fibo)
f = Fibo[k-2] + Fibo[k-1]
Fibo.append(f)
if f % 2 == 0:
ans.append(f)
print(np.sum(ans))
public static void fibo(){
ArrayList<Integer> list = new ArrayList<>();
list.add(1);
list.add(2);
for(int i =1; ; i++){
list.add(list.get(i-1) + list.get(i));
if(list.get(i-1) + list.get(i) > 4000000)
break;
}
list.remove(list.get(list.size()-1));
int sum = 0;
for(int i = 0; i < list.size(); i++){
if(list.get(i) % 2 == 0 ){
sum +=list.get(i);
}
}
System.out.println(sum);
}
bool isEven(int num) { return num % 2 == 0 ? true : false; }
bool isOverFlow(int num, int limit)
{
return num > limit ? true : false;
}
int GetMySum(int num1, int num2, int limit)
{
int sum = 0;
int target;
if (num1 > num2)
{
int temp = num1;
num1 = num2;
num2 = temp;
}
if (isOverFlow(num1, limit) == false)
{
if (isEven(num1)) sum += num1;
if (isOverFlow(num2, limit) == false)
{
if (isEven(num2))
{
if (sum == 0)
{
sum += num2;
while (true)
{
target = num1 + num2;
if (target == 0) break; // 예를들어 -1, 1이 오면 0으로 무한루프 돈다.
if (isOverFlow(target, limit)) break;
if (isEven(target)) sum += target;
num1 = num2;
num2 = target;
}
}
else
{
//sum = -1; // infinity. // num1&2가 둘다 짝수인 경우.
}
}
}
}
return sum;
}
def fibonacci(n):
a, b = 0, 1
result = []
while b <= n:
a, b = b, a+b
result.append(a)
return result
print(sum([num for num in fibonacci(4000000) if num % 2 == 0]))
실행결과
4613732
파이썬으로 간단하게 피보나치 수열을 리턴하는 함수를 작성한 뒤, 지능형 리스트로 짝수만 남겼습니다.
C
#include <stdio.h>
int main(int argc,char* argv[])
{
int a = 1, b = 1;
int result=0;
int tmp=1;
while(tmp<4000000)
{
tmp = a + b;
a = b;
b = tmp;
if(tmp%2==0)
result = result + tmp;
}
printf("%d",result);
return 0;
}
import java.io.IOException;
public class Main {
public static void main(String[] args) throws IOException {
System.out.println(fibo());
}
public static int fibo() {
int [] fiboArr = new int[100];
int sum = 0;
fiboArr[0] = 1;
fiboArr[1] = 1;
int i=2;
while (true) {
fiboArr[i] = fiboArr[i-1] + fiboArr[i-2];
if (fiboArr[i] % 2 == 0) {
sum += fiboArr[i];
}
if (fiboArr[i] > 4000000) {
break;
}
i++;
}
return sum;
}
}
처음에 재귀함수로 해보려고 했는데, 피보나치수가 50을 넘어가면 속도가 현저히 느려져서 배열을 이용한 피보나치로 구현하였습니다. 값은 4613732
파이썬으로 작성
prev, curr, fib_num = 0, 1, 1
fib_num_list = []
sum = 0
while fib_num <= 4000000 :
fib_num = prev + curr
prev = curr
curr = fib_num
if fib_num % 2 == 0 : sum += fib_num
print(sum)
public static void main(String[] args) {
ArrayList<Integer> fibonacciList = new ArrayList<Integer>();
ArrayList<Integer> evenList = new ArrayList<Integer>();
int maxNum = 4000000;
int curNum = 0;
int lastNum = 0;
int start = 2;
int len = 0;
int sum = 0;
fibonacciList.add(1);
fibonacciList.add(2);
for(int i = start; ; i++) {
curNum = fibonacciList.get(i - 2) + fibonacciList.get(i - 1);
if(curNum > maxNum) {
break;
}
fibonacciList.add(curNum);
}
len = fibonacciList.size();
for(int i = 0; i < len; i++) {
curNum = fibonacciList.get(i);
if(curNum % 2 == 0) {
evenList.add(curNum);
sum += curNum;
}
}
System.out.println("수열: " + fibonacciList);
System.out.println("짝수열: " + evenList);
System.out.println("합계: " + sum);
}
def f(cnt):
i = 0
arr = [1, 2]
while True:
i += 1
if arr[i] + arr[i - 1] >= cnt:
break
arr.append(arr[i] + arr[i - 1])
print(sum([x for x in arr if x%2 == 0]))
f(4000000)
import java.util.HashMap;
public class Example134 {
private static HashMap<Integer, Integer> map = new HashMap<>();
public static void main(String[] args) {
Example134 ex = new Example134();
int n = 1;
long sum = 0;
while (true) {
int num = ex.fibonacci(n);
if (num > 4000000)
break;
if (num % 2 == 0)
sum += num;
map.put(n, num);
n++;
}
System.out.println(sum);
}
private int fibonacci(int n) {
if (n <= 1) {
return n;
} else {
if (map.containsKey(n)) {
return map.get(n);
} else {
return fibonacci(n - 2) + fibonacci(n - 1);
}
}
}
}
피보나치 수열 방식으로 중복연산은 map을 이용해서 풀어 보았습니다.
# python 3.6
def fibo(n):
x = 1
y = 2
ret = list()
while x <= n:
ret.append(x)
x, y = y, x + y
return ret
print(sum([i for i in fibo(4 * (10**6)) if i % 2 == 0]))
# ans: 4613732
package ExampleMatterTest;
public class Even_Fibonacci_Numbers {
public static void main(String args[]) {
int fn = 1; int sn = 2; int tn = 3;
// fn = firstNum // sn = secondNum // tn = thirdNum
int sumNum = 2;
boolean run = true;
while(run) {
//firstNum이 가장 작은 경우
if(fn < sn && fn < tn) {
fn = (sn + tn);
if(fn % 2 == 0 && fn <= 4000000) {
sumNum += fn;
}
}
//secondNum이 가장 작은 경우
if(sn < fn && sn < tn) {
sn = (fn + tn);
if(sn % 2 == 0 && sn <= 4000000) {
sumNum += sn;
}
}
//thirdNum이 가장 작은 경우
if(tn < sn && tn < fn) {
tn = (sn + fn);
if(tn % 2 == 0 && tn <= 4000000) {
sumNum += tn;
}
}
//400만 검사
if(fn > 4000000 || sn > 4000000 || tn > 4000000) {
run = false;
}
}
System.out.println("Result : " +sumNum);
}
}
#include <iostream>
using namespace std;
int fib(int a, int b)
{
return a + b;
}
int main()
{
int a = 1, b = 2;
int temp;
int sum=0;
for ( ; b<=4000000 ; )
{
if (b % 2 == 0)
{
sum += b;
}
temp = b;
b=fib(a, b);
a = temp;
}
cout << sum;
}
// JAVA // RESULT : 4613732
import java.util.Arrays;
public class GetPibonacci {
public static void main(String[] args) {
int[] array = new int[1000]; array[0] = 0; array[1] = 1;
int firstSlot = 0; int secondSlot = 1; int slot = 2; int sum = 0;
while(array[firstSlot] +array[secondSlot] <= 4000000) {
array[slot] = (array[firstSlot] +array[secondSlot]);
slot++; firstSlot++; secondSlot++;
}
for(int a = 0; a < slot; a++) {
if(array[a] % 2 == 0) {
sum += array[a];
}
}
System.out.println(sum);
}
}
# 한글 처리 in Atom 1.21.1 + Anaconda(Python 3.6.3)
import sys
import io
sys.stdout = io.TextIOWrapper(sys.stdout.detach(), encoding='utf-8')
sys.stderr = io.TextIOWrapper(sys.stderr.detach(), encoding='utf-8')
# 피보나치 수열의 각 항은 바로 앞의 항 두 개를 더한 것이 됩니다.
# 1과 2로 시작하는 경우 이 수열은 아래와 같습니다.
# 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ...
# 짝수이면서 4백만 이하인 모든 항을 더하면 얼마가 됩니까?
pibonacci = [1, 2]
while pibonacci[-2] + pibonacci[-1] <= 4000000:
pibonacci.append(pibonacci[-2] + pibonacci[-1])
pibonacci_even = [pibonacci[i] for i in range(len(pibonacci)) if pibonacci[i] % 2]
print("짝수 피보나치 수열", pibonacci_even, "의 합은", sum(pibonacci_even))
res = 0
fn, fn_1 = 1, 0
while fn <= 4000000:
fn, fn_1 = fn + fn_1, fn
res = res + fn if not fn % 2 else res
print(res)
python 2.7
def fibo(x):
fibo = [1,2] # 우선 1,2로 시작하는 피보나치 수열을 만듭니다
while fibo[-1] + fibo[-2] < x: # 입력값 (여기서는 400만) 미만까지의 피보나치 수열을 생성합니다
fibo.append(fibo[-1] + fibo[-2])
sum_no = sum(i for i in fibo if i % 2 == 0) # 피보나치 수열에서 짝수만을 더합니다
return sum_no
print (fibo(4000000))
python
F =[1, 2]
i = 0
while True:
F += [F[i]+F[i+1]]
if F[i+2] > 4000000: break
i += 1
print(sum([x for x in F if not x%2]))
def Fibonacci(a, b, n, count=2):
if n==1: return(a)
elif n==2: return(b)
count+=1
if count!=n:
return(Fibonacci(b, a+b, n, count))
else:
return(a+b)
n=1
A=[]
while Fibonacci(1, 2, n)<=4e6:
A.append(Fibonacci(1, 2, n))
n+=1
print(sum([x for x in A if not x%2]))
#!/usr/bin/env python
prev, after=[0, 1]
sum=0
while after < 4000000:
prev= prev + after
prev, after = after, prev
if after % 2 == 0:
sum += after
print sum
a , b = [0,1]
total = 0
while b <= 4000000 :
a = a + b
b,a = a,b
if b % 2 == 0 : total += b
print(total)
#include <stdio.h>
void main() {
int result = 0;
int arr[50] = { 0, 1 };
int i = 2;
while (1) {
arr[i] = arr[i - 1] + arr[i - 2];
if (arr[i] > 4e+6)
break;
if (arr[i] % 2 == 0)
result += arr[i];
i++;
}
printf("%d\n", result);
}
lst = [1,2]
while (lst[-1]+lst[-2])<4000000 :
lst.append(lst[-1]+lst[-2])
print(sum(x for x in lst if x%2==0 ))
파이썬 3.6
def fibonaccinum(x):
fnum = 0
fnumtotal = 0
fnumlist =[]
for i in range(1,x+1):
if i < 3:
fnumlist.append(i)
if i % 2 == 0:
fnumtotal += i
else:
fnum = fnumlist[i-3] + fnumlist[i-2]
if fnum > x:
break
if fnum != 0:
fnumlist.append(fnum)
if fnum !=0 and fnum % 2 == 0:
fnumtotal += fnum
print("\n",">>> %d 이하의 피보나치 수열:" % x,"\n",fnumlist, "\n")
print(" >>> 짝수들의 합 : %d" % fnumtotal,"\n")
print("\n")
num = int(input(" ▶ 범위값을 자연수로 입력하세요: " ))
fibonaccinum(num)
▶ 범위값을 자연수로 입력하세요: 4000000
>>> 4000000 이하의 피보나치 수열:
[1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181, 6765, 10946, 17711, 28657, 46368, 75025, 121393, 196418, 317811, 514229, 832040, 1346269, 2178309, 3524578]
>>> 짝수들의 합 : 4613732
a1= int(input("첫번째 항을 입력하세요"))
a2= int(input("두번째 항을 입력하세요"))
l = int(input("숫자를 입력하세요"))
t = [a1,a2]
r = a1+a2
x = t[0] + t[1]
while x <= l:
x = t[0] + t[1]
t.append(x)
del t[0]
if x <= l:
if x%2 == 0:
r += x
print(r)
l = [2, 8]
i = 1
while l[i] < 4000000:
a = 4*l[i] + l[i-1]
l.append(a)
i += 1
for i in l:
if i > 4000000:
l.pop()
print(sum(l))
n = int(input("범위 : "))
def evenfibonacci(number):
a = [1,1]
b = number
c = []
for i in range(0,10000):
a.append(a[i]+a[i+1])
if a[i+2]+a[i+1] > b:
break
for j in a:
if j%2 == 0:
c.append(j)
return sum(c)
print(evenfibonacci(n))
def a(n):
if n<3:return n
else:return a(n-1)+a(n-2)
result=0
n=0
while a(3*n+2)<=4000000: #3n+2항에서만 짝수라는 것을 찾은 것.
result+=a(3*n+2)
n+=1
print(result)
def a(n):
if n<3:return n
else:return a(n-1)+a(n-2)
result=0
n=0
while a(n)<=4000000:
n+=1
if a(n)%2!=0:continue #수학적 특성을 모르는 경우. 위 보다 느리다.
result+=a(n)
print(result)
def evenf():
fibo=[1,2]
evenfibo=[]
n=input('number:')
i=0
while fibo[i]+fibo[i+1]<n:
fibo.append(fibo[i]+fibo[i+1])
i +=1
#print fibo
for i in fibo:
if i%2==0:
evenfibo.append(i)
#print evenfibo
print sum(evenfibo)
answer: 4613732
fibonacci_list=[1,2,3]
a=1
b=2
c=3
while True:
a=b
b=c
c=a+b
if c>4000000:
break
fibonacci_list.append(c)
ans_sum=0
for g in fibonacci_list:
if g%2==0:
ans_sum+=g
print(ans_sum)
public class fibonacci {
List<Integer> list = new ArrayList<Integer>();
int endNumber;
int firstNumber;
int secondNumber;
int sum;
public fibonacci(int endNumber) {
this.firstNumber = 1;
this.secondNumber = 2;
this.endNumber = endNumber;
}
public boolean fibonacciMake() {
list.add(firstNumber);
list.add(secondNumber);
int length = list.size();
while((list.get(length-1) + list.get(length-2)) < endNumber){
list.add(list.get(length-1)+list.get(length-2));
length = list.size();
}
return true;
}
public int fibonacciSum() {
int length = list.size();
for(int i = 0; i < length; i++) {
if((list.get(i) % 2) == 0) {
sum += list.get(i);
}
}
return sum;
}
}
4000000보다 작은 피보나치수열의 짝수의 합은 :4613732입니다
from pandas import Series
def fibbonacci(n):
fib = Series([])
fib[0] = 1; fib[1] = 2
for i in range(2,n):
fib[i] = fib[i-1] + fib[i-2]
if fib[i] > n:
break
return fib[:-1]
N = 4*10**6
sum(fibbonacci(N)[fibbonacci(N)%2==0])
def sum_fibonacci(n):
fibonacci = [1, 2]
even = [2]
while fibonacci[-1] < n:
fibonacci.append(fibonacci[-1] + fibonacci[-2])
if fibonacci[-1]%2 == 0:
even.append(fibonacci[-1])
if fibonacci[-1] == even[-1]:
del even[-1]
return sum(even)
print(sum_fibonacci(4000000))
Python 3
import numpy as np
def fiboMat(n):
f = np.array([[1,1],[1,0]]) # fibo matrix
if n in [-1,0]:
return f
elif n > 0:
res = np.dot(f,fiboMat(n-1))
return res
n = 0
while fiboMat(n)[0,0] < 4000000:
n += 1
print(n-1)
# 400만 이하일 n 값은 31
total = 0
for i in range(1,32,3): # 수열의 패턴 : 짝수+홀수 = 홀수, 홀수+홀수 = 짝수 활용
x = fiboMat(i)[0,0]
total += x
total
# 4613732
def fibonacci_numbers():
pass
numbers = [0, 1]
index = 0
fibo_sum = 0
while(1):
numbers.append(numbers[index] + numbers[index+1])
index += 1
if 4000000 <= numbers[-1]:
break
if 0 == numbers[-1] % 2:
#print(numbers[-1])
fibo_sum += numbers[-1]
print("fibo : %d" % (fibo_sum))
def main():
pass
fibonacci_numbers()
main()
import itertools
def fib():
'피보나치 수열 무한 제너레이터'
a, b = 1, 2
yield a
yield b
while 1:
c = a + b
yield c
a, b = b, c
print(sum(n for n in itertools.takewhile(lambda x: x < 4000000, fib()) if n % 2 == 0))
Swift입니다.
import Foundation
// Get Fibonacci series
func getFibonacciSeries() -> [Int] {
var series = [1,2]
while true {
let newNumber = series[series.count - 2] + series[series.count - 1];
if newNumber > 4_000_000 {
break;
}
series.append(newNumber)
}
return series;
}
var fibonacciSeries = getFibonacciSeries()
print(fibonacciSeries)
print(fibonacciSeries.filter { $0 % 2 == 0}.reduce(0, +))
def fib(num) :
a = 1
b = 2
sum = 0
while b <= num :
a,b = b,a+b
if a % 2 == 0 :
sum += a
else : return sum
print(fib(4000000))
list_ = [1,2]
while list_[-1] < 4000000:
list_.append(list_[-2] + list_[-1])
print(sum([i for i in list_ if i % 2 == 0]))
from functools import reduce
numbers = [1, 2]
i = 0
while True:
result = numbers[i] + numbers[i+1]
if result >= 4000000:
break
i = i + 1
numbers.append(result)
sum_result = reduce(lambda x, y: x + y, filter(lambda x: x % 2 == 0, numbers))
print(sum_result)
public class EFn{
public static void main(String[] args){
System.out.println("답은 ");
int input = 4000000;
int a,b,c,i, sum = 0;
a = 0 ;
b = 1 ;
c = a + b;
while(c <= input){
a = b;
b = c;
c = a + b;
if(c%2 == 0)
sum += c;
}
System.out.println(sum);
}
}
#include<iostream>
#include<vector>
#define MAX 4000000
using namespace std;
int main()
{
vector<int> v;
v.push_back(1), v.push_back(2);
int sum = 0, even_number = 0;
int i = 0, j = 1;
while (sum <= MAX)
{
sum=v[i] + v[j];
v.push_back(sum);
i++;
j++;
}
for (int i = 0; i < v.size(); i++)
{
if (v[i]%2 == 0)
{
even_number += v[i];
}
}
cout << even_number << ' ';
}
public static void main(String[] args) {
ArrayList<Integer> list = new ArrayList<>();
list.add(1);
list.add(2);
for(int i=1;;i++){//피보나치 수열을 list에 저장 list에 들어간 값이 400만을 넘으면 멈춤
list.add(list.get(i-1)+list.get(i));
if(list.get(i-1)+list.get(i)>4000000)
break;
}
list.remove(list.get(list.size()-1));//list에 마지막 인덱스 값을 제거(400만 넘으니깐)
int sum=0;
for(int i=0;i<list.size();i++){//짝수인 총합
if(list.get(i)%2==0)
sum+=list.get(i);
}
System.out.println(sum);
}
static long f(int num) {
long f1 = 0;
long f2 = 1;
long f = 0;
for (int i=1; i<num; i++) {
f = f2 + f1;
f2 = f1;
f1 = f;
}
return f;
}
public static void main(String[] args) throws Exception {
long sum = 0;
int i = 3;
while (f(i) <= 4000000) {
if (f(i)%2 == 0)
sum += f(i);
i++;
}
System.out.println(sum);
} // 자바
let arr = [1,2];
for(let i = 0; i<100; i++) {
arr[i+2] = arr[i+1] +arr[i];
}
let arr2= [];
for(let e =0; e< 100 ; e++) {
if(arr[e]%2 ==0 && arr[e] < 4000000) {
arr2.push(arr[e]);
}
}
let sum = arr2.reduce((a,b) => a+b);
def fibo():
a = 1
b = 2
s = 0
while a < 4000001:
a, b = b, a + b
if a % 2 == 0:
print("fibonacci value : %d" % a)
s += a
print("sum of fibonacci value above : %d" % s)
### Test
fibo()
fibonacci value : 2
fibonacci value : 8
fibonacci value : 34
fibonacci value : 144
fibonacci value : 610
fibonacci value : 2584
fibonacci value : 10946
fibonacci value : 46368
fibonacci value : 196418
fibonacci value : 832040
fibonacci value : 3524578
sum of fibonacci value above : 4613732
def fibo(N, a=[1,2], b=3):
while(b <= N): _, b = a.append(b), a[-1] + a[-2]
return a
print(sum(i for i in fibo(4000000) if i%2 == 0))
Python
a = 0
b = 1
n = 4000000
ans = 0
while True:
next = a + b
if next > n:
break
if next%2 == 0:
ans += next
a, b = b, next
print(ans)
public static void main(String[] args) {
int a = 1;
int b = 2;
int sum = 0;
int total = 2;
int max = 4000000;
while (sum <= max) {
sum = a + b;
a = b;
b = sum;
if (sum % 2 == 0) {
total += sum;
}
}
System.out.println(total);
}
fibonacci = [1, 2]
sum = 0
for i in range(1, 1000):
fibonacci.append(int(fibonacci[i-1]) + int(fibonacci[i]))
for j in fibonacci:
if j % 2 == 0 and j <= 4000000:
sum += j
print(sum)
Python 3.6
f1 = 1
f2 = 2
result = 2
while 1:
f1 = f1+f2
f1, f2 = f2, f1
if f2 > 4000000: break # 중복 검사를 피하기 위해
elif not f2%2: result += f2 # while에 조건식을 쓰지 않고 break를 이용
print(result)
Fibonacci_Table = [0, 1]
last_index = 1
while Fibonacci_Table[last_index] <= 4000000:
last_index += 1
Fibonacci_Table.append(Fibonacci_Table[last_index-1] + Fibonacci_Table[last_index-2])
sum_result = 0
for value in Fibonacci_Table:
if value % 2 == 0:
sum_result += value
print(sum_result)
package com.company;
public class Main {
public static void main(String[] args) {
int i = 1, j = 2;
int sum = 2;
int temp = 0;
int count = 0;
while(j <= 4000000)
{
if((i + j) % 2 == 0)
{
sum += i + j;
}
temp = i;
i = j;
j = temp + j;
count++;
}
System.out.println(sum + " " + count);
}
}
def fibo( n ):
if n in (1,2):
return n
return fibo(n-1) + fibo(n-2)
sumv = 0
n = 1
while 1:
f = fibo(n)
if f > 4000000: break
n += 1
if f % 2 == 0:
sumv += f
print(sumv)
c언어
#include<stdio.h>
int main()
{
int len,i =0;
int sum = 0;
int arr[40]= {1,2,0 };
while(1)
{
arr[i+2] = arr[i] + arr[i+1];
i++;
if(arr[i]>=4000000)
{
len = i;
break;
}
}
for(i=0; i<len; i++)
{
if(arr[i]%2 ==0)
{
sum += arr[i];
}
printf(" %d ", arr[i]);
}
printf("\nsum = %d ", sum);
}
package textpack; public class testaaaaa { public static void main (String [] args) { int sum = 0 , a = 1, b = 1, c;
while (a <= 4000000 ) {
System.out.println("현재 a = " + a);
if(a % 2 == 0)
sum += a;
c = a + b; a = b; b = c;
System.out.println(sum);}
} } // 답 4613732
class Program
{
static void Main(string[] args)
{
ShowPivo();
}
public static int Pivo(int n)
{
if (n == 1 || n == 2)
return 1;
else
{
return Pivo(n - 1) + Pivo(n - 2);
}
}
public static void ShowPivo()
{
int nPivoSum = 0;
for (int i = 1; i < 40; i++)
{
if (nPivoSum > 4000000)
break;
if (Pivo(i) % 2 == 0)
nPivoSum += Pivo(i);
}
Console.WriteLine(nPivoSum.ToString());
}
}
a=[1,2]
sums=0
for i in range(1,100):
if a[-1] > 4000000:
a.remove(a[-1])
break
a.append(a[i]+a[i-1])
for j in a:
if j %2==0:
sums +=j
print(sums)
#4613732
first,second,sum,current= 1,2,2,0
while current <= 4000000:
current = first + second
if current % 2 == 0 : sum += current
first,second = second,current
파이썬입니다.
public static void main(String[] args) {
int[] a = { 1, 2 };
int sum = 0;
while (a[0] < 4000000) {
sum += a[0] % 2 == 0 ? a[0] : a[1] % 2 == 0 ? a[1] : 0;
a[0] = a[0] + a[1];
a[1] = a[0] + a[1];
}
System.out.println(sum);
}
def fibonacci(n, m):
# returns fibonacci under number n
l = []
a, b = 0, 1
for i in range(n):
if a + b > m:
return l
a = a + b
l.append(a)
b, a = a, b
return l
n = int(input(" returns n number of fibonacci: "))
m = int(input(" Put the Limits for the Fib Number: "))
fl = fibonacci(n, m)
evenl = []
for num in fl:
if num % 2 == 0:
evenl.append(num)
print(sum(evenl))
#returns n number of fibonacci: 100
# Put the Limits for the Fib Number: 4000000
# --> 4613732
4613732
public class Pibo {
public static void main(String[] args) {
int tem = 0;
int lat = 2;
int sum = 0;
for (int fir = 1; fir<=4000000;) {
if (fir%2==0) {
sum+=fir;
}
tem = lat;
lat = fir+lat;
fir = tem;
}
System.out.println(sum);
}
}
fib_sum = 0
a, b, c = 0, 1, 0
while c <= 4000000:
c = a + b
a, b = b, c
if c % 2 == 0: fib_sum += c
print(fib_sum)
정답: 4613732
f_list = [1, 2]
f_val = sum(f_list[-2:])
while f_val <= 4000000:
f_list.append(f_val)
f_val = sum(f_list[-2:])
print(f_list)
value = sum([i for i in f_list if i%2 is 0])
print(value)
# answer is 4613732
l = [1,2]
l2 = []
count= 0
for i in range(3,4000001,1):
if l[count]+l[count+1]==i :
l.append(i)
count+=1
else:
continue
for i in l:
if i%2 == 0:
l2.append(i)
print(sum(l2))
a = 0
b = 1
fibo = []
while b <= 4000000:
c = a + b
a = b #1 1 2 3
b = c #1 2 3 5
fibo.append(b)
even_fibo = []
for even in fibo:
if even % 2 == 0:
even_fibo.append(even)
print(sum(even_fibo))
print(even_fibo)
'''
a = [1,2,3,4,5,6]
for i in a:
a.remove(i)
print(a)
'''
저 주석으로 달아놓은거는 결과가 [2,4,6]으로 나오는데 왜 그렇게 나오는지 모르겠네요 ㅠㅠ
num1=1
num2=2
sum=0
num_list=[1,2]
for x in range(1,101):
num3=num1+num2
num1=num2
num2=num3
if num3%2==0:
num_list.append(num3)
for x in range(0,len(num_list)-1):
if num_list[x]<=4000000:
sum+=num_list[x]
print(sum)
#include <stdio.h>
#include<stdlib.h>
int main()
{
int i;
int size = 4000000;
int *pibo = malloc(sizeof(int) *size); int sum;
pibo[0] = 1;
pibo[1] = 2;
sum = pibo[0] + pibo[1];
for (i = 0; i < 4000000; i++)
{
pibo[i + 2] = pibo[i] + pibo[i + 1];
if (pibo[i + 2] >= 4000000)
break;
if (pibo[i + 2] % 2 == 0)
{
sum = pibo[i + 2] + sum;
}
}
printf(" 짝수이고 400만이하인 수의 모든 합은 %d 입니다. ", sum);
}
4613733
a, b = 1, 2
result = [a, b]
while a < 4000000:
result.append(a+b)
a, b = b, a+b
return result
sum = 0
for i in result:
if i % 2 == 0:
sum += i
print(sum)
4613732 입니다.
파이썬으로 풀이했습니다.
while 반복문에서 반복횟수는 4백만이 훨씬 넘을 것으로 예상되는 횟수로 해서 임의로 넣어주었습니다.
previous = 0
current = 1
sum = 0
i = 0
while i < 100:
temp = previous
previous = current
current = temp + previous
if current >= 4000000:
break
if current % 2 == 0:
sum = sum + current
i = i + 1
print(sum)
#include <stdio.h>
int main(void)
{
int a = 1;
int b = 2;
int c=0;
int t;
int sum = 0;
while (c<=4000000)
{
c = a + b;
t = b;
b = c;
a = t;
if (c % 2 == 0)
{
printf("%d\n", c);
sum = sum + c;
}
}
printf("%d", sum+2);
return 0;
}
#include <stdio.h>
int main(void){
int a,b,sum;
a = 1;
b = 2;
sum = b;
while(a<=4000000){
a = a+b;
b = b+a;
if(a%2 == 0)
sum += a;
else if(b%2 == 0)
sum += b;
}
printf("%d",sum);
return 0;
}
first, second = 1, 2
sum = 2
while first <= 4000000 :
third = (first + second)
if third % 2 == 0 : sum += third
first, second = second, third
print(sum)
void main()
{
int size = 4000000;
int *pibo;
pibo = (int*)malloc(sizeof(int) * size);
pibo[0] = 1, pibo[1] = 2;
int sum = pibo[1];
for (int i = 0;; i++)
{
pibo[i + 2] = pibo[i] + pibo[i + 1];
if (pibo[i + 2] > 4000000)
break;
if (pibo[i + 2] % 2 == 0)
{
sum += pibo[i + 2];
}
}
printf("%d", sum);
free(pibo);
}
FB = [1,2]
i = 1
while True:
i += 1
FB.append(FB[i-2] + FB[i-1])
if FB[i] > 4000000: break
sum = 0
for k in range(i):
if int(str(FB[k])[-1]) % 2 == 0: sum += FB[k]
print(sum)
답 : 4613732
namespace codingdojang__
{
class Program
{
static void Main(string[] args)
{
List<int> fibonacci_list = new List<int> { 1, 2 };
int total = 0;
for (int i = 0; fibonacci_list[i] < 4000000; i++)
{
fibonacci_list.Add(fibonacci_list[i] + fibonacci_list[i + 1]);
}
foreach (var i in fibonacci_list)
{
if (i % 2 == 0)
{
total += i;
}
}
Console.WriteLine(total);
}
}
}
def fib(n):
""" Returns n'th Fibonacci number. """
a, b = 1, 1
for i in range(n):
a, b = b, a+b
return a
S = 0
for n in range(100):
if fib(n)%2 == 0 and fib(n) < 4000000:
S = S + fib(n)
print (S)
a = 0
b = 1
total = 0
while b < 4000001:
a = a + b
b, a = a, b
if b % 2 == 0:
total += b
print(total)
public static void main(String[] args) {
int a=1,b=2,temp,sum=0;
do {
System.out.println(a);
if(a%2==0)
sum+=a;
temp=a+b;
a=b;
b=temp;
} while(a<=4000000);
System.out.println(sum);
}
fib=[0,1]
i=1
while True:
i+=1
t=fib[i-2]+fib[i-1]
if t<=4000000: fib.append(t)
else: break
sum=0
for i in range(len(fib)):
if fib[i]%2==0:
sum+=fib[i]
print(sum)
package level1;
public class Fibonacci {
public static void main(String[] args) {
int val1 = 0;
int val2 = 1;
int val3 = 0;
int total = 0;
for(int i=1; val3 < 4000000; i++){
val3 = val1 + val2;
val1 = val2;
val2 = val3;
if(val2 % 2 == 0){
total += val2;
}
}
System.out.println(total);
}
}
public class Main {
public static void main(String[] args) {
int fib1 = 1;
int fib2 = 2;
int fib3 = 0;
int sum = 0;
while (fib3 <= 4000000)
{
fib3 = fib1 + fib2;
fib1 = fib2;
fib2 = fib3;
if (fib3 % 2 == 0)
sum += fib3;
}
System.out.println(sum + 2);
}
}
a=1
b=2
c=a+b
result = 0
while a<=4000000:
if a%2==0:
result+=a
a=b
b=c
c=a+b
print(result) #4613732
그냥 가볍게
#include <cstdio>
long long int even_fibo(int N)
{
int ans[3] = {1,2,3};
long long int ret = 0;
while (ans[0] <= N)
{
if (ans[0] % 2 == 0)
ret += ans[0];
ans[0] = ans[1];
ans[1] = ans[2];
ans[2] = ans[0] + ans[1];
}
return ret;
}
int main(void)
{
int N;
scanf("%d", &N);
printf("%lld", even_fibo(N));
return 0;
}
Fibonacci=[1,2];ans=2
while (Fibonacci[len(Fibonacci)-1]<=4000000):
Fibonacci.append(Fibonacci[len(Fibonacci)-2]+Fibonacci[len(Fibonacci)-1])
if Fibonacci[len(Fibonacci)-1]%2==0:
ans+=Fibonacci[len(Fibonacci)-1]
print(ans)
Fibo = [1,2]
pb = 3
i = 2
Sum = 2
while pb <= 4000000:
pb = Fibo[i-2] + Fibo[i-1]
if pb <= 4000000:
Fibo.append(pb)
if pb%2 == 0:
Sum += pb
i += 1
print(Sum)
#include <stdio.h>
int Fibonacci(int index);
void main(){
int fibNumber = 1;
int fibEvenSum = 0;
while(Fibonacci(fibNumber)<=4000000){
if(Fibonacci(fibNumber)%2==0){
fibEvenSum = fibEvenSum + Fibonacci(fibNumber);
}
fibNumber = fibNumber + 1;
}
printf("%d",fibEvenSum);
}
int Fibonacci(int index){
int temp;
int countIndex=0;
int fibZero=1;
int fibOne=2;
if(index==1){
return fibZero;
}else if(index==2){
return fibOne;
}else{
for(countIndex;countIndex<index-2;countIndex++){
temp = fibOne;
fibOne = fibZero + fibOne;
fibZero = temp;
}
return fibOne;
}
}
def pibo(n):
lst =[1,2]
while sum(lst[-2:])<n:
lst.append(sum(lst[-2:]))
return lst
s = 0
for i in pibo(4000000):
if i%2 ==0:
s += i
print(s)
4613732
def Even_Fibonacci_sum(n): #n 이하인 피보나치 수열의 총합
a1=1 #초기값.
a2=2
result=0
while(True):
if a2<=n: #a2가 n을 넘으면 루프 종료
if a2%2==0:
result+=a2 #짝수이면 합산
tmp=a1+a2 #다음항 만들기
a1=a2
a2=tmp
else:
break
return result
if __name__ == '__main__':
n=4e6 #4백만
print(Even_Fibonacci_sum(n))
파이썬 3.7 사용. 4백만뿐 아니라 모든 자연수n에서 쓸 수 있게 만들어봤습니다.
t = [1,2]
while (True):
if t[-1] > 4000000:
break
t.append(t[-2]+t[-1])
sum = 0
for i in range(len(t)):
if t[i] % 2 == 0:
sum += t[i]
print(sum)
python
def fib(ind): # 피보나치수열을 발생시키는 함수
if ind == 0:
return 1
if ind == 1:
return 2
if ind >= 2:
return fib(ind-1) + fib(ind-2)
index = 0
while True: # 항의 값이 4백만을 넘는 최초의 경우 탐색 -> index == 32
number = fib(index)
if number <= 4000000:
index += 1
if number > 4000000:
print(index, number)
break
seq= []
for i in range(0,32): # index 31 이하인 항들 중 짝수인 경우만 리스트 seq에 포함시킴
if fib(i) % 2 == 0:
seq.append(fib(i))
print(seq)
sum(seq) # answer : 4613732
python 3.7
{1, 1, 2, 3, 5,...}로 진행되는 피보나치 수열은 3n 번째 항은 짝수가 되고 나머지는 홀수입니다. 이유는 짝+짝=짝, 홀+짝=홀, 홀+홀=짝 이므로 {홀+홀, 홀+짝, 짝+홀, 홀+홀,...} 이 반복되기 때문입니다.
따라서 3n번째 항을 바로 계산하면 반복횟수가 1/3이 되고 짝수 확인을 위한 if문을 없앨 수 있습니다.
a = 0
b = 1
res = 0
while 1:
a, b = a + 2 * b, 2 * a + 3 * b
if a > 4000000:
break
res += a
print(res)
%Matlab
Fibo=[1,2];
n=2;a=1;b=2;
while Fibo(n)<3000000
n=n+1;
Fibo(n)=Fibo(n-1)+Fibo(n-2);
end
Fibo_even=[];
n=1;
for k=1:1:max(find(Fibo))
if mod(Fibo(k),2)==0
Fibo_even(n)=Fibo(k);
n=n+1;
else
end
end
sum(Fibo_even)
python 3.7 피보나치 수열은 "....홀,홀,짝,홀,홀,짝,...." 패턴을 가진다는 사실을 이용하여 피보나치 수열을 list로 직접 생성하면서 해당 리스트의 (3k+2)-번째 항을 더하였습니다.
i = 2
sum = 0
Fib = [1,1,2]
while 1:
Fib += [Fib[i-1]+Fib[i]]
if i%3 == 2:
sum+=Fib[i]
i+=1
if Fib[i] >= 4000000: break
print(sum)
public class pibonaci {
public static void main(String[] args) {
// TODO Auto-generated method stub
int num1=0;
int num2=1;
int sum=0;
for(int i=1; i<=4000000; i++) {
if(i==num1+num2) {
num1=num2;
num2=i;
if(i%2==0) {
sum=sum+i;
}
}
}
System.out.print(sum);
}
}
자바로 풀었습니다. 정답은 4613732
num1=1
num2=2
result=0
even=[num1,num2]
while True:
num3=num1+num2
num4=num2+num3
if num3>4000000 or num4>4000000:
break
else:
even.append(num3)
even.append(num4)
num1=num3
num2=num4
final=[]
for i in even:
if i%2==0:
final.append(i)
print(sum(final))
fibo = [1, 2]
i = 0
tmp = 0
while fibo[-1] < 4000000:
k = fibo[i] + fibo[i+1]
fibo.append(k)
i += 1
del fibo[-1]
for i in range(len(fibo)):
if fibo[i]%2 == 0:
tmp += fibo[i]
print(tmp)
PHP
$sum = 0;
[$i, $j] = [0, 1];
while ($j <= 4000000) {
[$i, $j] = [$j, $i + $j];
if ($j % 2 === 0) $sum += $j;
}
print_r($sum); // 4613732
fibo = []
count = 0
fibo_val = 0
even_sub = 0
while fibo_val <= 4000000:
if count == 0:
fibo.append(1)
elif count == 1:
fibo.append(2)
else:
fibo.append(fibo[count - 2] + fibo[count - 1])
fibo_val = fibo[count]
if fibo_val % 2 == 0:
even_sub += fibo_val
count += 1
print(even_sub)
List<Integer> fibonacci = new ArrayList<Integer>();
fibonacci.add(1);
fibonacci.add(2);
int sum = 0;
//1. 4백만 이하의 피보나치 수열을 먼저구한다
for(int i=1;; i++) {
fibonacci.add(fibonacci.get(i)+fibonacci.get(i-1));
if (fibonacci.get(i)+fibonacci.get(i-1) > 4000000) {
break;
}
}
//2. 피보나치 수열 중 짝수인 것을 모두 더한다
for(Integer i : fibonacci) {
if(i%2==0) {
sum += i;
}
}
System.out.println(sum);
다른 분 풀이 참고해서 풀었습니다. 이제 막 collection 개념을 배웠는데 바로 응용할 수 있어서 재밌네요. 답 : 4613732
fibo = [1,2]
i = 0
result = []
while fibo[i] <= 4000000:
sum1 = fibo[i]+fibo[i+1]
fibo.append(sum1)
if fibo[i]%2 ==0 :
result.append(fibo[i])
i+=1
print(sum(result))
파이썬
# Even Fibonacci numbers
a = 1
b = 2
c = 3
sum = 2
while c < 4000001:
a, b, c = b, c, b + c
if c % 2 == 0:
sum += c
print(sum)
import java.util.*;
public class EvenFibonacciNumbers {
public static void main(String[] args) {
int a = 1;
int b = 2;
ArrayList<Integer> Fibonacci_list = new ArrayList<Integer>();
for(int i=0;; i++) {
if(a<b) {
Fibonacci_list.add(a);
a+=b;
}
else {
Fibonacci_list.add(b);
b+=a;
}
if(a>40000000||b>40000000) {
break;
}
}
int sum = 0;
for(int j = 0; j<Fibonacci_list.size(); j++) {
if(Fibonacci_list.get(j)%2==0&&Fibonacci_list.get(j)<4000000) {
sum+=Fibonacci_list.get(j);
}
}
System.out.println(sum);
}
}
파이썬 입니다.
def fibo(n): # n을 인덱스로 사용하여 fibo_list에서 원하는 피보나치수열 값을 꺼낼 수 있도록 함수를 만들었습니다.
fibo_list=[] # 만든 피보나치 수열을 담는 리스트를 정의
a=1
b=2
fibo_list.append(a)
for i in range(n): # 기존 while 반복문보다는 for문이 n을 인덱스로하는 함수에 적용시 원하는 값을 리턴하는데
fibo_list.append(b) # 좋아 for문을 적용했습니다.
a,b=b,a+b # a 값에 b를 집어넣고, b값에 a+b를 집어넣어 a(n-2) + a(n-1) = a(n) 피보나치 수열
return fibo_list[n] # 정의식과 맞아 떨어집니다.
# n을 인덱스로한 fibo_list의 리스트 요소를 fibo_list[n]를 리턴하는 함수를 정의 했습니다.
fibo_sum=sum(list(filter(lambda x: x%2==0 and x<=4000000 ,map(lambda x:fibo(x),range(32)))))
# 리스트 내 요소를 더하는 sum()을 가장 앞에 배치했고
# filter 함수를 list로 만들도록 list(filter()) 순으로 배치했습니다.
# filter함수의 반복값 x에 들어가는 값으로 map(lambda x:fibo(x),range(32))을 주었습니다.
# 32 인덱스까지가 500만을 넘기에 32를 주었고 map함수를 주어 iterable로 피보나치 수열 수들이 리턴되도록 했습니다.
# lambda x: x%2==0 and x<=4000000 리턴된 피보수열 수들을이 짝수이면서 400만 이하가되도록 함수를 배치했고
# 앞에 배치한 filter 함수에 의해 조건식에 만족하는 피보 수열 수들이 리스트가 되도록 만들었습니다.
생각했던걸 주석으로 달려니 글이 길어지네요 ㅋ 굳이 보지 않으셔도 됩니다. ㅋ
list_pibo = [1, 2]
new_list = [2]
i = 0
while True:
new_int = list_pibo[i] + list_pibo[i + 1]
list_pibo.append(new_int)
if new_int % 2 == 0:
new_list.append(new_int)
if new_list[-1] > 4000000:
break
i += 1
sum = 0
for i in range(len(new_list)-1):
sum += new_list[i]
print(sum)
def even_fib(num_SUM, dep, num1, num2) :
next_num = num1 + num2
if next_num % 2 == 0 :
num_SUM += next_num
if next_num < 4000000 :
return even_fib(num_SUM, dep+1, num2, next_num)
else :
return num_SUM
even_fib(2, 1, 1, 2)
결과
4613732
a = 0
b = 1
result = []
while True:
c = a + b
a = b
b = c
if c > 4000000 :
break
if c%2 ==0 :
result.append(c)
print(sum(result))
파이썬 3입니다
평범하게 풀었습니다
F = [0, 1]
even_sum = 0
while True:
temp = F[0] + F[1]
if temp > 4000000:
break
F[0] = F[1]
F[1] = temp
if temp % 2 == 0:
even_sum += temp
print(even_sum)
public class Fibonacci2 {
public static void main(String[] args) {
Fibonacci2 Fb =new Fibonacci2();
int a = 0;
int result = 0;
int sum =0;
while(Fb.fibonacci(a)<=4000000) {
a++;
}
for(int l=0; l<a; l++) {
result = Fb.fibonacci(l);
if(result % 2 == 0) {
sum += result;
}
}
System.out.printf("모든 항의 합은 %d 이다.",sum);
}
int fibonacci(int a) {
if( a == 0 || a== 1) {
return a;
}
else {
return fibonacci(a-2)+ fibonacci(a-1);
}
}
}
a=1
b=2
Fibo =[1,2]
c=0
while (a+b) < 4000000:
c = a + b
Fibo.append(c)
a = b
b = c
print(Fibo)
Fibo_even=[]
for j in range(0,len(Fibo)):
if int(Fibo[j]%2) == 0:
Fibo_even.append(Fibo[j])
print(sum(Fibo_even))
Nlist= [1,2]
Nfinish = 2
check = 0
for i in range(1,4000001):
if Nlist[check] + Nlist[check+1] == i:
Nlist.append(i)
check += 1
if i % 2 == 0:
Nfinish += i
print(Nfinish)
import numpy as np def fib(n): if n == 0 : return 1 if n == 1 : return 2 return fib(n-2) + fib(n-1)
result = [] for i in range(4000000): i = fib(i) if i%2 == 0: result.append(i)
print(np.sum(result))
4000000이 수가 너무 커서 로딩이 너무 기네요. 10이나 20같이 십자리 수 내에서는 잘 돌아가는 것이 확인되어서 그냥 올립니다.
a=1
b=2
c=a+b
sum=b
print (a)
print (b,sum)
while (1):
a=b
b=c
c=a+b
if (c>4000000):
break
if (c%2==0):
sum=sum+c
print (c,sum)
print()
print (sum)
추천 코드 약간 수정 했어요
``````{.python}
a, b = [0, 1]
sum = 0
while b <= 4000000:
if b == 4000000:
break
a = a + b
b, a = a, b
if b % 2 == 0:
sum += b
print(sum)
def fibonacci_sum(fibonacci):
n = 0
result = []
while True:
if fibonacci[n] + fibonacci[n + 1] <= 4000000:
fibonacci.append(fibonacci[n] + fibonacci[n + 1])
else:
break
n += 1
for x in fibonacci:
if x % 2 == 0:
result.append(x)
return sum(result)
print(fibonacci_sum([1, 2]))
l=[1,2]
c=0
i=-1
s=0
while True:
i+=1
c=l[i]+l[i+1]
if c<=4000000:
l.append(c)
else:
break
for i in l:
if i%2==0:
s+=i
else:
pass
print(s)
파이썬 입니다.
p=[1,2]
for i in range(100):
if p[i+1]>4000000:break
else:
p.append(p[-1]+p[-2])
sum=0
for i in p:
if i%2==0:
sum+=i
else:pass
print(sum)
print(p)
import java.util.ArrayList;
public class Q134 {
public static void main(String[] args) {
int sum = 0;
ArrayList<Integer> result = new ArrayList<Integer>();
for(int i=1;; i++) {
if(i==1||i==2) {
result.add(i);
} else if(i>2 && result.get(i-2)+result.get(i-3) < 4000000) {
result.add(result.get(i-2)+result.get(i-3));
} else if(result.get(i-2)+result.get(i-3)>4000000) {
break; // 4백만 보다 커지면 for문 종료
}
}
for(int i=0; i<result.size();i++) {
if(result.get(i)<4000000 && result.get(i)%2==0) { // 4백만 보다 작고, 짝수일 경우
sum+=result.get(i);
}
}
System.out.println(sum);
}
}
답은 4613732 나오네요
def even_fib_sum():
seq_list = [1, 2]
while seq_list[-1] <= 4000000:
seq_list.append(seq_list[-1] + seq_list[-2])
return sum([i for i in seq_list[:-1] if i % 2 == 0])
a = [1,2]
i = 0
b = []
while max(a) <= 4000000 :
if (int(a[i])+int(a[i+1])) >= 4000000:
break
a.append(int(a[i])+int(a[i+1]))
i += 1
for i in a:
if int(i)%2 == 0:
b.append(i)
else:
continue
print(sum(b))
def fibonacci(n):
if n==0:
return 0
if n==1:
return 1
else:
return fibonacci(n-2)+fibonacci(n-1)
k=1
x=0
while True:
if fibonacci(k)<=4000000:
if fibonacci(k)%2==0:
x+=fibonacci(k)
k=k+1
else:
k=k+1
else:
break
print(x)
temp=[None]*1000000
temp[0]=1
temp[1]=2
sum=2
i=2
while True :
temp[i]=temp[i-2]+temp[i-1]
if temp[i]%2==0 :
sum+=temp[i]
if temp[i]>4000000 :
break
i+=1
print(sum)
a = 1
b = 2
count = 0
while b <= 4000000:
if b % 2 == 0:
count += b
b = a + b
a = b - a
print(count)
드디어 배열없이 문제를 풀어봤네요 ㅜㅜ 사고가 조금 확장된 느낌이에요!
def fibonacci(L):
L.append(L[-1]+L[-2])
def fibonacci2(L):
print(sum([i for i in L if i%2==0 and i<4000000]))
List1=[1,2]
while List1[-1]<4000000:
fibonacci(List1)
fibonacci2(List1)
답은 4613732
package test;
import java.util.*;
public class Test{
public static void main(String[] args) {
ArrayList<Integer> list = new ArrayList<>();
int j=0;
int count = 0;
list.add(1);
list.add(2);
for(int i=3; i<=4000000; i++) {
if(i == list.get(j) + list.get(j+1)) {
list.add(i);
j++;
}
}
for(int b : list) {
if(b % 2 == 0)
count += b;
}
System.out.print(count);
}
}
#include <stdio.h>
int main(){
int a1=1;
int a2=2;
int temp;
int sum=0;
while (a2<4000000)
{
if(a2%2==0)
sum += a2;
temp=a1+a2;
a1=a2;
a2=temp;
}
printf("%d",sum);
return 0;
}
답은 4613732
namespace _60일차_9월30일
{
class MainApp
{
//1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ... 짝수이면서 4백만 이하인 모든 항을 더하면 얼마가 됩니까?
static void Main(string[] args)
{
int first = 0;
int second = 1;
int Temp = 0;
int result = 0;
while (Temp <= 4000000)
{
Temp = first + second;
first = second;
second = Temp;
if (Temp % 2 == 0)
result += Temp;
}
Console.WriteLine($"Result = {result}");
}
}
}
class SumPita:
def __init__(self):
self.sum = 0
def doEvenSum(self):
b = []
b.append(1)
b.append(2)
self.sum = 2
i = 2
while True:
c = b[i-2]+b[i-1]
if c>4000000:
break
b.append(b[i-2]+b[i-1])
if (b[i-2]+b[i-1])%2==0:
self.sum += b[i-2]+b[i-1]
i = i+1
print(self.sum)
a = SumPita()
a.doEvenSum()
파이썬입니다.
def fib(n):
if n <= 0:
return 0
elif n <= 1:
return n
else:
return fib(n-2) + fib(n-1)
fib_even = []
cnt = 0
while True:
cnt +=1
fib_num = fib(cnt)
if fib_num > 4_000_000:
break
if fib_num % 2 == 0:
fib_even.append(fib_num)
print(sum(fib_even))
def pibo(num):
temp = [1, 2]
while True:
if temp[-1] + temp[-2] > num:
break
else:
temp.append(temp[-1] + temp[-2])
return temp
result = []
for aa in pibo(4000000):
if aa % 2 == 0:
result.append(aa)
print(sum(result))
fibo=[1,2]
i=2
while True:
new=fibo[i-2]+fibo[i-1]
if new > 4000000:
break
fibo.append(new)
i=i+1
answer=0
for i in fibo:
if i%2==0:
answer=answer+i
print(answer)
array=[1,1]
Sum = 0
while array[1]<=4000000:
array[0] = array[0]+array[1]
array[1] = array[0]+array[1]
Sum+=sum([x for x in array if x%2==0])
if array[1]>4000000 and array[1]%2==0:
print(Sum-array[1])
else :
print(Sum)
list_fib = [1, 2]
result = 2
i = 0
while list_fib[-1] <= 4000000:
list_fib.append(list_fib[i] + list_fib[i+1])
i += 1
if list_fib[-1] % 2 == 0:
result += list_fib[-1]
print(result)
pibonacci = [1,2]
while pibonacci[-2]+pibonacci[-1]<=4000000:
pibonacci.append(pibonacci[-2]+pibonacci[-1])
print(sum([x for x in pibonacci if x%2==0]))
def f(n):
if n == 0:
return 0
if n == 1:
return 1
return f(n-1) + f(n-2)
count = 0
i = 2
while f(i) <= 4000000:
if f(i) % 2 == 0:
count += f(i)
i += 1
print(count)
def Fibonacci(a,b):
A=[a,b]
i=0
tot=0
tots=0
while A[i+1] < 4000000:
tot=A[i]+A[i+1]
if tot>4000000:
break
A.append(tot)
i+=1
for i in A:
if i%2==0 and i<=4000000:
tots+=i
print(tots)
Fibonacci(1,2)
list = [1,2]
list1 = []
for i in range(100):
sum1 = list[-1] + list[-2]
list.append(sum1)
if sum1 % 2 == 0 and sum1 <= 4000000:
list1.append(sum1)
print(sum(list1) + 2)
def fibo(n):
memo={1:1, 2:2}
output = 2
i = 2
while memo[i] <= n:
i += 1
memo[i] = memo[i-2] + memo[i-1]
if memo[i] % 2 == 0:
output += memo[i]
return output
print(fibo(4000000))
l = [1,2]
i = 0
while i < 4e6:
i = l[-1]+l[-2]
l.append(i)
print(sum(list(filter(lambda x:x%2 == 0,l))))
python 3.9.1입니다.
def fib(n):
result = []
if n >= 0: result.append(0)
if n >= 1: result.append(1)
while True:
result.append(result[-1] + result[-2])
if result[-1] > n:
del result[-1]
break
if result[-1] == n:
break
return result
whole_fib = fib(4000000)
answer = [num for num in whole_fib if num % 2 == 0]
print(sum(answer))
결과입니다.
4613732
n=4000000
array=[1,2]
while True:
s = array[-1] + array[-2]
if s < n:
array.append(s)
else:
break
s=0
for i in range(0,len(array)):
if array[i] % 2 == 0:
s += array[i]
print(s)
fib=[1,2]
a=1
b=2
plus=0
while True:
a=a+b
fib.append(a)
b=b+a
fib.append(b)
if a > 4000000 or b > 4000000 :
break
for i in fib:
if i % 2 == 0:
plus+=i
print(plus)
fib = [0,1]
s = 0
while fib[-1] <= 4e6:
fib.append(fib[-1]+fib[-2])
if fib[-1]%2 == 0:
s += fib[-1]
print(s)
'''
피보나치 수열의 각 항은 바로 앞의 항 두 개를 더한 것이 됩니다. 1과 2로 시작하는 경우 이 수열은 아래와 같습니다.
1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ...
짝수이면서 4백만 이하인 모든 항을 더하면 얼마가 됩니까?
'''
#sum of even Fibonacci number
def fibonacci_even_number(N):
org=[1,2]
even=[2]
sum_1=3
while sum_1 <= int(N):
org.append(sum_1)
if sum_1%2 ==0:
even.append(sum_1)
sum_1=org[-1]+org[-2]
return sum(even)
N=4000000
Pib=[1,2]
Even_P=[]
i=0
while i < N:
i = Pib[-1]+Pib[-2]
if i <N:
Pib.append(i)
for j in range(len(Pib)):
if j%3==1:
Even_P.append(Pib[j])
print(Pib)
print(Even_P)
print(sum(Even_P))
list = [1,2]
i=2
while True:
list.append(list[i-2] + list[i-1])
if list[i-2] + list[i-1] > 4000000:
break
i+=1
sum=0
for i in list:
if i % 2 == 0:
sum+=i
else:
pass
print(sum)
def fibonacci():
result = 0
list = [1, 2]
i = 0
while True:
list.append(list[i] + list[i + 1])
i += 1
if int(list[i]) > 4000000:
break
if list[i] % 2 == 0:
result += list[i]
return result
print(fibonacci())
#codingdojing_even fibo numbers
def fibo(n):
if n == 0:
return 0
elif n == 1:
return 1
else:
return fibo(n-1) + fibo(n-2)
result = 0
n = 0
while fibo(n) < 4000000:
if fibo(n) % 2 == 0:
result += fibo(n)
else:
pass
n += 1
print(result) #4613732
########################################
result = 0
x = 0
y = 1
while y < 4000000:
if y%2 == 0: result += y #순서 유의
x = x + y
x, y = y, x
print(result) #4613732
파이썬으로 작성되었습니다.
fibonacci = [1, 2]
sum = sum(fibonacci)
for i in range(31):
fibonacci.append(fibonacci[i] + fibonacci[i + 1])
if fibonacci[-1] > 4000000:
break
if fibonacci[-1] % 2 == 0:
sum += fibonacci[-1]
print(sum)
Fibonacci = [1,2]
even = []
for n in range(2,10000):
if Fibonacci[n-1] + Fibonacci[n-2] > 4000000:
break
Fibonacci.append(Fibonacci[n-1] + Fibonacci[n-2])
for i in Fibonacci:
if i % 2 == 0:
even.append(i)
print(sum(even))
package exam;
public class Ex20 {
public static void main(String[] args) {
int f1 = 1; // 첫번쨰 항
int f2 = 2; // 두번째 항
int f3 = 0; // 세번째 항
int max = 4000000; // 맥스값
int sum = f2; // 짝수만 더한다
while(f3 <= max) {
// 대입연산자 이용
f3 = f1 + f2;
f1 = f2;
f2 = f3;
// f1 + f2의 값이 짝수이면 sum에 더한다
if(f3 % 2 == 0) {
sum += f3;
}
}
System.out.println("sum : " + sum);
}
}
sum : 4613732
fib = [0,1]
while (fib[-1]+fib[-2]) <= 4000000 :
fib.append(fib[-1]+fib[-2])
print(sum([x for x in fib if x % 2 == 0]))
static int fib(int x) {
if(x == 1)
return x;
else if(x == 2)
return x;
else
return fib(x-2) + fib(x-1);
}
public static void main(String[] args) {
int sum = 0;
for(int i = 1; i <1000; i++) {
System.out.print(fib(i) + " ");
if(fib(i)%2==0 && fib(i) < 4000001)
sum += fib(i);
else if(fib(i) > 4000000)
break;
}
System.out.println();
System.out.print(sum);
}
arr = [1,2]
for k in range(2,1000000) :
arr.append(arr[k-1] + arr[k-2])
if arr[k] >4000000 :
arr.remove(arr[k])
break
sum = 0
for k in range(len(arr)) :
if arr[k]%2 == 0 :
sum +=arr[k]
print(sum)
a = [1,2]
n = 2
while a[-1] < 400:
b = a[n-1] + a[n-2]
a.append(b)
n = n+1
even = [x for x in a if x%2 ==0]
print(sum(even))
// Rust
fn main() {
let limit = 400_0000;
let mut a = 1;
let mut b = 2;
let mut total = 0;
while b <= limit {
if b % 2 == 0 {
total += b;
}
let tmp = a;
a = b;
b += tmp;
}
println!("{}", total);
}
previous=1
current=1
sum=0
while current<=4000000:
if current %2 == 0 : sum += current
temp = previous
previous = current
current = current + temp
print(sum)
result = [1, 2]
i=2
while i <400000:
n= result[i-1]+result[i-2]
if n <=4000000:
result.append(n)
else: break
i = i+1
print(sum(filter(lambda x: x%2==0, result)))
# 피보나치 수열의 각 항은 바로 앞의 항 두 개를 더한 것이 됩니다. 1과 2로 시작하는 경우 이 수열은 아래와 같습니다.
# 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ...
# 짝수이면서 4백만 이하인 모든 항을 더하면 얼마가 됩니까?
# 피보나치 수열을 만든다
list_fibo = [1, 2]
num_last = 4000000
num_add = 0
while num_add <= num_last:
i = len(list_fibo)
num_add = list_fibo[i-1] + list_fibo[i-2]
if num_add > num_last:
break
else:
list_fibo.append(num_add)
value_last = list_fibo[len(list_fibo)-1]
print(f'{num_last}까지의 피보나치 수열')
print(list_fibo)
print()
list_fibo_even = []
for j in list_fibo:
if j % 2 == 0:
list_fibo_even.append(j)
else:
pass
print(f'{num_last}까지의 피보나치 수열 중 짝수 리스트')
print(list_fibo_even)
print()
print(f'{num_last}까지의 피보나치 수열 중 짝수 합계')
print(sum(list_fibo_even))
package com.algorithm.algorithmpractice.dojang;
public class OilerPivo {
public static void main(String[] args) {
int i = 1;
int total = 0;
while (pivo(i) < 4000000){
if(pivo(i) % 2 == 0) {
total += pivo(i);
}
i++;
}
System.out.println(total);
}
public static int pivo(int num) {
if(num == 1){
return 1;
}
if(num == 2){
return 2;
}
return pivo(num-1) + pivo(num-2);
}
}
fibo = [1, 2]
count = 0
while fibo[-1] < 4000000:
if count >= 1:
fibo.append(fibo[-1] + fibo[-2])
count +=1
else:
count += 1
print(sum([x for x in fibo if x % 2 == 0]))
파이썬입니다.
list = [0,1]
while list[-1] <= 4000000:
list.append(list[-1] + list[-2])
sum([x for x in list if x % 2 == 0 and x <= 4000000])
n=400*10**4
a= [1,2]
b= 0
for i in range(1,n):
if b < n:
b = a[i-1]+a[i]
a.append(b)
a =[i for i in a if i%2==0 and i<=n]
print(a)
print(sum(a))
def evenFibo(ui):
fb = [1,2]
while fb[-2]+fb[-1] <= ui:
fb.append(fb[-2]+fb[-1])
even_fb = [ x for x in fb if x%2 == 0 ]
for j in even_fb:
if j == even_fb[-1]:
print("%d" % j, end='')
else:
print("%d + " % j, end='')
print(" = %d" % (sum(even_fb)))
ui = int(input("n 이하의 모든 짝수 피보나치항의 총합을 구합니다.\nn 입력>> "))
evenFibo(ui)
+)
# without function
ui = int(input("n 이하의 모든 짝수 피보나치항의 총합을 구합니다.\nn 입력>> "))
fb = [1,2]
while fb[-2]+fb[-1] <= ui:
fb.append(fb[-2]+fb[-1])
even_fb = [ x for x in fb if x%2 == 0 ]
print(f"짝수이면서 {ui} 이하인 피보나치 수열:", str(even_fb)[1:-1])
print("총합:", sum(even_fb))
파이썬 3.8.5
a = [1, 2]
def phibonachi(a):
while True:
a.append(a[-1]+a[-2])
if a[-1] >4000000:
break
Total_phibonachi = 2
phibonachi(a)
for i in a:
if i%2 == 0:
Total_phibonachi += i
print(Total_phibonachi)
python
n_list = [1,2]
n_now = 0
n_sum = 0
i=1
while n_now <= 4e+6:
n_now = n_list[i-1]+n_list[i]
n_list.append(n_now)
i += 1
for x in n_list[:-1]:
if x%2 == 0:
n_sum += x
print(n_sum)
private static int fibonachEven(){ //피보나치 값들 정렬하기 ArrayList<Integer> num = new ArrayList<>(); num.add(1); num.add(2); //짝수합 int sum=0; for(int i=0; i<4000000; i++) { int newNum = num.get(i) + num.get(i+1); if(newNum>4000000) break; num.add(newNum); } for(int j : num) { if(j % 2 == 0) { sum += j; } } return sum;}
Python. 다른 분들 코드를 보니 제 풀이는 메모리 효율성이 좋은 코드는 아니군요.
#evenFibonacciNumbers.py
def fibonacci():
fibo=[1,2]
result=[]
while fibo[-2]+fibo[-1]<4000000: #n 이하의 피보나치 수열을 구하는 함수
fibo.append(fibo[-2]+fibo[-1])
for i in range(len(fibo)):
if fibo[i]%2==0:
result.append(fibo[i]) #피보나치 수열의 항 중 짝수만을 골라 리스트화
print(sum(result)) #피보나치 수열의 짝수 항의 총합 출력
fibonacci()
#결과는 4613732
import numpy as np
intInput=4000000
def sumFibonacciNumbers(intInput):
listNums=[1,2]
intSum=0
while listNums[-1]<=intInput:
listNums.append(listNums[-1]+listNums[-2])#400만까지의 피보나치 수열 생성
if(listNums[-1])>intInput:
del listNums[-1]#400만을 넘게 될 마지막 원소 삭제
for i in listNums:
if i%2==0:
intSum+=i#400만까지의 짝수인 피보나치 수열 합계
return intSum
print(sumFibonacciNumbers(intInput))
using System;
using System.Collections.Generic;
namespace solution
{
class Program
{
static void Main(string[] args)
{
int n = 4000000;
List<int> fibonacciLst = new List<int>() { 1, 1 };
int idx = 1;
int evenSum = 0;
while(fibonacciLst[idx] <= n)
{
if(fibonacciLst[idx] % 2 == 0)
evenSum += fibonacciLst[idx];
fibonacciLst.Add(fibonacciLst[idx - 1] + fibonacciLst[idx]);
idx++;
}
Console.WriteLine("\n {0}", evenSum);
}
}
}
def even_fibonacci():
results = 2
fibo_1 = 1
fibo_2 = 2
fibo_3 = 0
while fibo_3 <= 4000000 :
fibo_3 = fibo_1 + fibo_2
if fibo_3 % 2 == 0 :
results += fibo_3
fibo_1 = fibo_2
fibo_2 = fibo_3
return results
fib = [1, 2, 3, 5, 8, 13, 21, 34, 55, 89]
i = len(fib)-1
while fib[i] < 4000000:
add = fib[i] + fib[i-1]
fib.append(add)
i = len(fib)-1
sum_fib = 0
for seqnum in fib:
if seqnum % 2 == 0 & seqnum < 4000000:
sum_fib += seqnum
print(sum_fib)
fib = [1, 2, 3, 5, 8, 13, 21, 34, 55, 89]
i = len(fib)-1
while fib[i] < 4000000:
add = fib[i] + fib[i-1]
fib.append(add)
i = len(fib)-1
sum_fib = 0
for seqnum in fib:
if seqnum % 2 == 0 & seqnum < 4000000:
sum_fib += seqnum
print(sum_fib)