鱼C论坛

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

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

  [复制链接]
发表于 2016-12-29 10:07:07 | 显示全部楼层
  1. a = 1
  2. b = 2
  3. i = 0
  4. summation = 0
  5. while i < 4000000:
  6.     i = a + b  #第3个数为前两数之和
  7.     a = b      #第2个数的值做为下次计算的第1个数
  8.     b = i      #将得到的值做为下次计算的第2个数
  9.     if i % 2 == 0:
  10.         summation += i
  11. print(summation + 2) #2没计算,加上
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-1-5 23:24:37 | 显示全部楼层
  1. #计算400万以下的斐波那契数列偶数项之和
  2. from time import time

  3. start = time()
  4. temp = [1,2]
  5. sum = 0
  6. for i in range(2,100):
  7.     t =  temp[i-2] + temp[i-1]
  8.     if t%2 == 0:
  9.         sum += t
  10.     if t<=4000000:
  11.         temp.append(t)
  12.     else:
  13.         break
  14. print(sum)
  15. end = time()
  16. print('cost %.3f \'s' % (end - start))   
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-1-9 20:33:13 | 显示全部楼层
本帖最后由 marmot 于 2017-1-9 20:45 编辑
  1. import time
  2. start=time.time()
  3. def feb(n):
  4.     if n == 1:
  5.         return 1
  6.     if n == 2:
  7.         return 2
  8.     return feb(n-1)+feb(n-2)
  9. sum=0
  10. for n in range(1,2000):
  11.     if feb(n) < 4000000 and feb(n)%2 == 0:
  12.         sum =sum + feb(n)
  13.     if feb(n)>= 4000000:
  14.         break
  15.     print(sum)
  16. print('%.10f' % (time.time()-start))
复制代码


————————————————————迭代函数————————————————————
结果:

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

使用道具 举报

发表于 2017-1-9 20:45:22 | 显示全部楼层
  1. import time
  2. start=time.time()
  3. f1,f2 = 1,2
  4. f3=0    #随便定义
  5. sum=0
  6. while f3 < 4000000:
  7.     f3 = f1 + f2 #斐波那契数列传参
  8.     f1 = f2
  9.     f2 = f3
  10.     if f3 % 2 == 0:
  11.         sum += f3
  12. print(sum+2)
  13. print('花费时间%.5f' % (time.time()-start))
复制代码


——————————循环————————————————————
结果:

4613732
花费时间0.00000
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-1-11 18:28:33 | 显示全部楼层
使用Matlab编程
Problem2所用时间为0.00036606
Problem2的答案为4613732
  1. function Sum=Problem2(Input)
  2. tic
  3. if nargin==0
  4. Input=4*10^6;
  5. end
  6. Fibonacci=zeros(1,8000);
  7. Fibonacci(1)=1;
  8. Fibonacci(2)=2;
  9. for ii=3:8000
  10.     Fibonacci(ii)=Fibonacci(ii-1)+Fibonacci(ii-2);
  11.     if Fibonacci(ii)>=Input&&Fibonacci(ii-1)<Input
  12.         Node=ii-1;
  13.         break
  14.     end
  15. end
  16. Temp=Fibonacci(1:1:Node);
  17. for kk=1:Node
  18.     if mod(Temp(kk),2)~=0
  19.         Temp(kk)=0;
  20.     end
  21. end
  22. Sum=sum(Temp);
  23. toc;
  24. disp(['Problem2所用时间为',num2str(toc)])
  25. disp(['Problem2的答案为',num2str(Sum)])
  26. end
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-1-20 16:50:10 | 显示全部楼层
  1. #include<iostream>
  2. #include<stdio.h>
  3. #include<string.h>
  4. #include<queue>
  5. using namespace std;
  6. #include<algorithm>
  7. int main()
  8. {
  9.     queue<int > Q;
  10.     Q.push(1);
  11.     Q.push(2);
  12.     int sum=0;
  13.     int temp1,temp2;
  14.     while(!Q.empty())
  15.     {
  16.         temp1=Q.front();
  17.         Q.pop();
  18.         if(temp1>4000000)break;
  19.         if(!(temp1&1))sum+=temp1;
  20.         temp2=Q.front();
  21.         Q.push(temp1+temp2);
  22.     }//4613732
  23.     cout<<sum;
  24.     return 0;
  25. }

  26. #include<iostream>
  27. #include<stdio.h>
  28. #include<string.h>
  29. using namespace std;
  30. #include<algorithm>
  31. int main()
  32. {
  33.     int a=1,b=2,c=2;
  34.     int sum=0;
  35.     while(c<=4000000)
  36.     {
  37.         if(!(c&1))sum+=c;
  38.         c=a+b;
  39.         a=b;
  40.         b=c;
  41.     }//4613732
  42.     cout<<sum;
  43.     return 0;
  44. }

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

使用道具 举报

发表于 2017-1-22 13:42:33 | 显示全部楼层
  1. b=1
  2. c=2
  3. a=[b,c]
  4. d=0
  5. while d<=4000000:
  6.     d=b+c
  7.     if d<=4000000: a.append(d)
  8.     b=c
  9.     c=d
  10. sum1=0
  11. for each in a:
  12.     if each%2==0:
  13.         sum1+=each
  14. print(sum1)
复制代码

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

使用道具 举报

发表于 2017-1-24 10:35:39 | 显示全部楼层
'''
欧拉计划·2:
斐波那契数列中的每一项都被定义为两项之和
从1和2开始,斐波那契数列的前十项为:
1、2、3、5、8、13、21、34、55、89
求解:斐波那契数列中数值不超过4百万的项,并找出这些项中值为偶数的项之和

'''
def fibonacci() :    #    生成斐波那契数列
    a, b = 1, 2
    max = 40000000
    num = [0]
    while b < max :    #    循环至最大值之前
        b, a = a + b, b
        if b % 2 == 0 :    #    检测是不是偶数
            num.append(b)
    print(sum(num))    #    求和

没解决怎么往面输入上限值的问题,希望有会的大神们不吝赐教
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-2-2 01:29:05 | 显示全部楼层
  1. import time

  2. def fibonacci_1(max_value=10000):
  3.     '迭代,找出菲波那切数列中数值不超过4百万的偶数项之和'
  4.     value1 = 1
  5.     value2 = 2
  6.     value = 0
  7.     count = value2
  8.     while value <= max_value:
  9.         value = value1 + value2
  10.         value1 = value2
  11.         value2 = value

  12.         if value % 2 == 0:
  13.             count += value
  14.     return count

  15. start = time.clock()
  16. print(fibonacci_1(4000000))
  17. end = time.clock()
  18. print('程序执行了%fs。' %(end - start))
复制代码

执行结果:
4613732
程序执行了0.005757s。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-2-13 13:02:57 | 显示全部楼层
赞一个
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-2-15 22:25:23 | 显示全部楼层
  1. def fab(num):
  2.     a = 1
  3.     b = 1
  4.     if num == 0 or num == 1:
  5.         return num
  6.     else:
  7.         for i in range(1,num):
  8.             c = a+b
  9.             a = b
  10.             b = c
  11.         return b
  12. i = 1
  13. k = 0
  14. while fab(i) <= 4000000:
  15.     if fab(i) % 2 == 0:
  16.         k +=fab(i)
  17.     i +=1
  18. print(k)
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-2-18 14:18:22 | 显示全部楼层
C++版本
4613732
  1. #include<iostream>
  2. using namespace std;

  3. long long Sum(int maxint)
  4. {
  5.     long long sum = 2;
  6.     int i = 1,j = 2,a=0;
  7.     while(a <= maxint)
  8.     {
  9.         if(a%2 == 0)
  10.             sum+=a;
  11.         a = i+j;
  12.         i = j;
  13.         j = a;
  14.     }
  15.     return sum;
  16. }

  17. int main()
  18. {
  19.     long long sum = Sum(4000000);
  20.     cout<<sum<<endl;
  21.     return 0;
  22. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-2-19 16:46:49 | 显示全部楼层
  1. /*斐波那契数列中,找出4百万以下项中值为偶数的项之和*/
  2. #include <stdio.h>

  3. int main()
  4. {
  5.     int i, j, sum, t;
  6.     i = 1; j = 1; sum = 0; t = 0;
  7.     while(j < 4000000)
  8.     {
  9.         t = j;
  10.         j = i + j;
  11.         i = t;
  12.         sum += j%2 ? 0 : j;//本来想判断j%2等于0的,将错就错,调换了后面的输出项
  13.     }
  14.     printf("sum = %d", sum);
  15.     return 0;
  16. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-2-20 21:13:02 | 显示全部楼层
  1. print(""" 斐波那契数列中的每一项被定义为前两项之和。从 1 和 2 开始,斐波那契数列的前十项为:
  2. 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ...
  3. 考虑斐波那契数列中数值不超过 4 百万的项,找出这些项中值为偶数的项之和。
  4. ----------------------------------------------------""")

  5. #斐波拉契数列表
  6. list_feb = [1, 2]
  7. while (True):
  8.     n = list_feb[-1] + list_feb[-2]
  9.     if n > 4000000:
  10.         break
  11.     else:
  12.         list_feb.append(n)

  13. #取出偶数并相加
  14. aw = 0
  15. for x in list_feb:
  16.     if x%2 == 0:
  17.         aw += x

  18. print("答案是: " + str(aw))
  19. print("PS小于四百万的斐波拉契数列列表为:" + str(list_feb))
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-2-24 09:57:44 | 显示全部楼层
  1. even_fib = []
  2. a = b = 1
  3. while b<4000000:
  4.     a, b = b, a+b
  5.     if b%2 == 0:
  6.         even_fib.append(b)
  7. sum(even_fib)
复制代码


我的结果是4613732
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-2-28 17:28:52 | 显示全部楼层
  1. maxnum=4000000
  2. def Fibonacci(old,oldd):
  3.         new = old+oldd
  4.         if new >maxnum:
  5.                 return 0
  6.         else:
  7.                 if new%2==0:
  8.                         return new + Fibonacci(new,old)
  9.                 else:
  10.                         return Fibonacci(new,old)
  11. print (Fibonacci(0,1))
复制代码


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

使用道具 举报

发表于 2017-3-1 14:41:22 | 显示全部楼层
python
  1. fibo=[1,2]
  2. while True:
  3.     x=sum(fibo[-2:])
  4.     if x<=4000000:
  5.         fibo.append(x)
  6.     else:break
  7. print(sum(fibo[::2]))
复制代码
  1. == RESTART: C:\Users\ASUS\AppData\Local\Programs\Python\Python35-32\test.py ==
  2. 3524577
  3. >>>
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-3-6 11:08:50 | 显示全部楼层
  1. l=[0,1]
  2. a=0
  3. for i in range(2,1000):
  4.     a=l[i-2]+l[i-1]
  5.     if a>=4000000:
  6.         break
  7.     l.append(a)
  8. sum=0
  9. for j in l:
  10.     if j%2==0:
  11.         sum+=j
  12. print(sum)
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-3-17 13:01:01 | 显示全部楼层
a=0
b=1
sum = 0
while a<4000000:
    a,b=b,a+b
    if b<4000000:
        # print(b,end=" ")
        if b%2==0:
            #print(b,end=" ")
            sum += b
print(sum)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-3-26 15:35:54 | 显示全部楼层
本帖最后由 JonTargaryen 于 2017-3-26 15:38 编辑
  1. #include <stdio.h>
  2.   
  3. int main(void)
  4. {
  5.     int num1 = 1, num2 = 1, num3;
  6.     int sum = 0;

  7.     while(num2 < 4000000)
  8.     {
  9.         num3 = num1 + num2;
  10.         num1 = num2;
  11.         num2 = num3;
  12.   
  13.         if(!(num2 % 2))
  14.         {
  15.             sum += num2;
  16.         }
  17.     }

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-3-28 20:03

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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