鱼C论坛

 找回密码
 立即注册
楼主: 欧拉计划

题目2:在斐波那契数列中,找出4百万以下的项中值为偶数的项之和

  [复制链接]
发表于 2017-9-29 15:47:23 | 显示全部楼层
AArdio编译:
  1. import console;
  2. import time.timer

  3. console.setTitle("test");

  4. time.timer.start();
  5. sum = 0;
  6. f1,f2 = 1,2;
  7. while(f2<4000000){
  8.         if(f2%2==0){
  9.                 sum += f2
  10.         }
  11.         f1, f2 = f2, f1+f2;
  12.        

  13. }

  14. console.print(sum);

  15. console.print(time.timer.endTick())

  16. console.pause();
复制代码

4613732
0.28738313913345
请按任意键继续 ...
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-1-4 10:41:46 | 显示全部楼层
#include <stdio.h>

int main(void)
{
        long f1=1,f2=2;
        long f3=0;
        long sum=2;
       
        while( f3 < 4000000 )
        {
                f3=f2+f1;
                if ( f3 % 2==0)
                {
                        sum+=f3;
                }
                f1=f2;
                f2=f3;
        }
       
        printf("%ld",sum);
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-2-8 12:30:38 | 显示全部楼层
  1. #include <stdio.h>

  2. #define MAX 4000000

  3. int main(void)
  4. {
  5.      int first = 1;
  6.      int second = 2;
  7.      int tmp;
  8.      long sum = 0;

  9.      while (first <= MAX && second <= MAX )
  10.      {
  11.          if (second % 2 == 0)
  12.          {
  13.              sum += second;
  14.          }
  15.          tmp = first;
  16.          first = second;
  17.          second += tmp;
  18.      }

  19.      printf("%ld\n", sum);
  20.      return 0;
  21. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-4 20:39:51 | 显示全部楼层
  1. t = lambda x: x if x < 2 else t(x-1)+t(x-2)
  2. sum1 = sum([j for j in [t(i) for i in range(4000000)] if not j%2])
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-14 12:27:54 | 显示全部楼层
  1. def fib(n):
  2.     if n == 1:
  3.         return 1
  4.     elif n == 2:
  5.         return 2
  6.     else:
  7.         return fib(n - 1) + fib(n - 2)
  8. lis = []
  9. i = 1
  10. s = 0
  11. while fib(i) <= 4000000:
  12.     lis.append(fib(i))
  13.     i += 1
  14. for j in lis:
  15.     if j % 2 == 0:
  16.         s += j
  17. print('Fib数列为:',lis)
  18. print('Fib数列中偶数和为:%d' % s)
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-26 14:43:07 | 显示全部楼层
  1. import time


  2. def fibosum(maxnum):
  3.     global begin
  4.     begin = time.time()
  5.     a = 1
  6.     b = 2
  7.     sum = 2
  8.     while b < maxnum:
  9.         a, b =b, a + b
  10.         if b % 2 == 0:
  11.             sum += b
  12.     return sum


  13. print fibosum(4000000)
  14. print time.time() - begin
复制代码


python
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-4-1 17:26:08 | 显示全部楼层
public class Forehe {

    public static void main(String[] args) {
         int sum = 2;

        for (int a = 1,b = 2, c = a+b;c <4000000;c = a+b)
        {
            if(c % 2 == 0)
            {
                sum += c;
            }

            a = b;
            b = c;

        }

        System.out.println(sum);
    }
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-4-11 20:21:55 From FishC Mobile | 显示全部楼层
def fbnq2():
    x = 1
    y = 2
    n = 0
    lis = []
    while n<= 4000000:
        n = y
        y += x
        x = n
        if n % 2 == 0:
            lis.append(n)
    return sum(lis)
   
print fbnq2()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-4-11 20:22:50 From FishC Mobile | 显示全部楼层
结果是4613732
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-5-22 15:28:59 | 显示全部楼层
  1. #include<stdio.h >
  2. int main()
  3. {
  4.         long int sum = 2;
  5.         long int f1, f2, f3;
  6.         f1 = 1;
  7.         f2 = 2;
  8.         f3 = f1 + f2;
  9.         while (f3 < 4000000) {
  10.                
  11.                 f1 = f2;
  12.                 f2 = f3;
  13.                 f3 = f1 + f2;
  14.                 if (f2 % 2 == 0) {
  15.                         sum += f2;
  16.                 }

  17.         }
  18.         printf("%d\n", sum);

  19.         return 0;
  20. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-6-22 10:48:19 | 显示全部楼层
  1. def Fibonacci(n):
  2.     n1 = 1
  3.     n2 = 1
  4.     n3 = 1

  5.     while (n-2) > 0:
  6.         n3 = n2 + n1
  7.         n1 = n2
  8.         n2 = n3
  9.         n -= 1

  10.     return n3



  11. list1 = []
  12. sum = 0
  13. for n in range(1, 100):
  14.     if Fibonacci(n) < 4000000:
  15.         list1.append(Fibonacci(n))

  16. for each in list1:
  17.     if each % 2 == 0:
  18.         sum += each

  19. print(sum)
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-7-10 21:31:46 | 显示全部楼层
  1. Fibonacci = list()
  2. evenNumber_in_Fibonacci = list()    #verrible2
  3. num_of_terms = 100000

  4. num1 = int(1)
  5. num2 = int(1)
  6. num3 = int()

  7. Fibonacci.extend([num1, num2])  #First term and second term

  8. for i in range(num_of_terms):    #four million terms
  9.     Fibonacci.append(Fibonacci[-2] + Fibonacci[-1])

  10. for i in range(1, num_of_terms):
  11.     evenNumber_in_Fibonacci.append(Fibonacci[i]) if i % 3 == 0 else None
  12.    
  13. sum_of_verrible2 = sum(evenNumber_in_Fibonacci)


复制代码


最多到十万(只用了一秒)……不然就会卡死(指数级上升的感觉,四十万压力会很大)
如果用C的话可能会好点,差不多到一百万左右
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-7-16 17:46:33 | 显示全部楼层
#include <stdio.h>
int main(void)
{
        int i=1,j=2,k,sum=0;
        while(i<4000000)
        {
                k=j;
                j=j+i;
                i=k;
                if(j%2==0)
                {
                        sum+=j;
                }
        }
        printf("%d",sum);
        return 0;
}
思考了有一阵子翻了翻前面的答案才想明白
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-7-19 17:29:41 | 显示全部楼层
a,b = 1,1
c = []
while b<4000000:
        a,b = b,a+b
        if b % 2 == 0:
                c.append(b)
a = 0
for each in c:
        a += each
print(a)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-8-23 10:37:46 | 显示全部楼层
  1. def fib():
  2.     a,b=0,1
  3.     while b<4000000:
  4.         a,b=b,a+b
  5.         if not b%2:
  6.             yield b
  7. print(sum(fib()))
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-8-25 23:49:02 | 显示全部楼层
python
  1. i1 = 1
  2. i2 = 2
  3. t = 2
  4. while 1:
  5.     j = i1 + i2
  6.     i1 = i2
  7.     i2 = j
  8.     if (j > 4000000):
  9.         break
  10.     if (j%2 == 0):
  11.         t = t+j
  12. print(t)
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-9-18 11:16:32 | 显示全部楼层
#斐波那契数列中的每一项被定义为前两项之和。从 1 和 2 开始,斐波那契数列的前十项为:

#1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ...

print("考虑斐波那契数列中数值不超过 4 百万的项,找出这些项中值为偶数的项之和")

def fab(n):
    he = 0
    a1 = 1
    a2 = 1
    a3 = 0
    while a3 < n:
        a3 = a1 + a2
        a1 = a2
        a2 = a3

        if a3 % 2 == 0:
            print(a3)
            he += a3
    return he

n = int(input('请输入一个正数:'))
print(fab(n))
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-10-9 19:13:55 | 显示全部楼层
DAY 发表于 2016-7-11 10:31
此题的数据结果比较大,用long long类型比较好。。
4048803411799

..你的总和是i<=400万之中偶数和,并不是题目要的偶数和。而且你前十个真的试过吗。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-10-9 19:16:47 | 显示全部楼层
输出结果:4613732

int i=0,k=0,sum=0;
        int j=1;
        for (; j < 4000000; )
        {
                k=j;
                j+=i;
                i=k;
                if (j%2==0)
                        sum+=j;
        }
        printf("%d",sum);
        system("pause");
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-11-13 08:06:45 | 显示全部楼层
  1. n1 = 1
  2. n2 = 2
  3. sum = 2

  4. def fib(n1,n2):
  5.         n3 = n1 + n2
  6.         if n3 <= 4000000:
  7.                 if n3 % 2 == 0:
  8.                         global sum
  9.                         sum += n3
  10.                 return fib(n2,n3)
  11.         else:
  12.                 print('上一个数为:%s'%str(n2))
  13.                 print('现在已经到达 %s'%str(n3))
  14.                 print('目前总和为:%s'%str(sum))

  15. fib(n1,n2)
复制代码


计算速度,0.1秒
我的答案:4613732
最后一个项中值:3524578
跳出函数项中值:5702887
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-11 04:02

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表