24小时热门版块排行榜    

查看: 2730  |  回复: 8
本帖产生 1 个 程序强帖 ,点击这里进行查看

holmescn

金虫 (正式写手)

[交流] Euler 工程 第二题:Fibonacci数列中小于4百万的偶数的和 已有7人参与

前一题仍在征集中,大家要继续想算法啊!

今天帖出第二题:
求Fibonacci数列中所有小于4百万的偶数的和。

Fibonacci数列大家都知道吧,就是兔子数列啊,列出前10项是:
1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ...

当然也有第0项是1的写法,不过1不是偶数,不会影响结果的。

这个比上一次的那个有挑战性喔!

别忘了1分钟原则!

[ Last edited by holmescn on 2011-5-12 at 15:08 ]
回复此楼
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

微尘、梦想

木虫 (知名作家)

★ ★ ★ ★
小木虫(金币+0.5):给个红包,谢谢回帖
余泽成(金币+3, 程序强帖+1): 鼓励交流!以前的补上! 2011-06-04 19:26:38
#include "stdio.h"
void main(void)
{
    int i=1,j=1,n=0;
    for(;i<4000000&&j<4000000; )
    {
         i+=j;
         if(i%2==0) n+=i;
         j+=i;
         if(j%2==0) n+=j;
    }
    printf("%d\n",n);
}
结果:4613732
不知道对不对,不过我用小于10的项计算结果是10,另外时间不是问题,结果是瞬间出来的,一直不知道如何调用系统时间来计算程序运行的时间,希望高手指点一下,谢谢!

[ Last edited by 微尘、梦想 on 2011-5-8 at 18:24 ]
任风云变幻,我笑对人生!
2楼2011-05-08 18:23:35
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

libralibra

至尊木虫 (著名写手)

骠骑将军

★ ★ ★
小木虫(金币+0.5):给个红包,谢谢回帖
微尘、梦想(金币+2): 谢谢参与! 2011-05-09 17:54:20
跟楼上超级像的代码
matlab 的
CODE:
a = 1;
b = 2;
n = 2
tic;
while (a<4000000 && b<4000000)
   a = a+b;
   if mod(a,2)==0
       n = n+a;
   end
   b = a+b;
   if mod(b,2)==0
       n = n+b;
   end
end
toc;
n

结果及运行时间
CODE:
Elapsed time is 0.000008 seconds.
n =
     4613732

matlab/VB/python/c++/Java写程序请发QQ邮件:790404545@qq.com
3楼2011-05-09 01:28:12
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

xioooli

金虫 (小有名气)

★ ★ ★
小木虫(金币+0.5):给个红包,谢谢回帖
微尘、梦想(金币+2): 谢谢参与! 2011-05-09 17:54:36
python
CODE:
def Fibonacci(n):
    a,b = 1,2
    while a < n:
        yield a
        a,b = b,a+b

print sum([i for i in Fibonacci(4000000) if i%2==0])

bash
CODE:
n1=1
n2=2
fib=2
result=0
while [ $fib -lt 4000000 ]; do
        if [ "$(($fib%2))" = 0 ]; then
                echo $fib
                result=$(($result+$fib))
        fi
        fib=$(($n1+n2))
        n1=$n2
        n2=$fib
done
echo result = $result

4楼2011-05-09 14:05:43
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

ll20100996

禁虫 (知名作家)

★ ★ ★
小木虫(金币+0.5):给个红包,谢谢回帖
微尘、梦想(金币+2): 谢谢参与! 2011-05-09 17:54:56
本帖内容被屏蔽

5楼2011-05-09 14:11:04
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

holmescn

金虫 (正式写手)

★ ★
微尘、梦想(金币+2): 鼓励交流! 2011-05-09 17:55:10
嘿嘿,看我的Mathematica版:
CODE:
F[n_] := (((1 + Sqrt[5])/2)^(3 n) - ((1 - Sqrt[5])/2)^(3 n))/Sqrt[5];
n = 1; sum = 0;
While[F[n] < 4000000, sum += F[n]; n++]
Simplify[sum]

这里用到了Fibnacci数列的通项公式:


这里,n变成3n,则得到所有的偶数项。可惜这个算法只有在mathematica里好用。
6楼2011-05-09 14:47:51
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

huycwork

金虫 (著名写手)

★ ★ ★
小木虫(金币+0.5):给个红包,谢谢回帖
微尘、梦想(金币+2): 鼓励参与…… 2011-05-14 19:40:51
这个问题不能这么迭代滴!完全可以算出每一个偶数项哒~~~~
诸位请看:
1 2 3 5 8 13 21
这个数列存在两个规则,第一个大家都晓得
An = An-1 + An-2
针对这个问题,存在第二个规则:
奇数+偶数=奇数
偶数+奇数=奇数
奇数+奇数=偶数
奇数+偶数=奇数
偶数+奇数=奇数
这里可以看到,三个数是一个循环,偶数中间穿插了两个奇数。虽然看起来还是需要循环迭代,但是突然想到前阵子sudo提到的循环展开,这灵光就闪现了:
An = An-1 + An-2
An+1 = An + An-1 = An-1 + An-2 + An-1 = 2*An-1 + An-2
An+2 = An+1 + An = 2*An-1 + An-2 + An-1 + An-2 = 3*An-1 + 2*An-2
于是,每个奇数和偶数都可以由前面的规则计算出来。
B1 = 1
C1 = 2
B2 = 2*C1 + B1 = 5
C2 = 3*C1 + 2*B2 = 8
B3 = 2*C2 + B2 = 21
C3 = 3*C2 + 2*B2 = 34
……
漩涡的中心有一块空地,空空的。
7楼2011-05-14 15:17:40
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

hnuzhoulin

金虫 (小有名气)

★ ★
小木虫(金币+0.5):给个红包,谢谢回帖
dubo(金币+1): 多谢交流 2011-06-04 17:10:26
昨天才发现有这个项目啊
我也来参加,只是编程基础很差,就这个简单问题,都花了好几分钟。汗啊
8楼2011-06-04 07:51:33
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

杨小胖

金虫 (正式写手)

★ ★ ★
小木虫(金币+0.5):给个红包,谢谢回帖
jjdg(金币+1): 端午节快乐 2011-06-06 03:19:16
jjdg(金币+1): 感谢参与 2011-06-06 03:19:25
CODE:
% 求Fibonacci数列中所有小于4百万的偶数的和。
% Fibonacci数列大家都知道吧,就是兔子数列啊,列出前10项是:
% 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ...

tic;
sum=0;
a(1)=1;
a(2)=2;
i=2;
while a(i)<4000000
    a(i+1)=a(i)+a(i-1);
    i=i+1;
end
for i=1:length(a)
if mod(a(i),2)==0
    sum=sum+a(i);
end
end
sum
toc;

sum =

     4613732

Elapsed time is 0.003695 seconds.

对比libralibra 的代码,还是他的效率高。
人生中最辉煌的不是功成名就的时候,而是在失败和挫折中看到希望并为之奋斗的日子
9楼2011-06-05 16:01:17
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 holmescn 的主题更新
普通表情 高级回复 (可上传附件)
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[考研] 302求调剂 +3 小贾同学123 2026-03-15 5/250 2026-03-16 20:39 by zhq0425
[考研] 材料专硕306英一数二 +4 z1z2z3879 2026-03-16 6/300 2026-03-16 19:38 by z1z2z3879
[基金申请] 今年的国基金是打分制吗? 50+3 zhanghaozhu 2026-03-14 3/150 2026-03-16 17:07 by 北京莱茵润色
[考研] 本人考085602 化学工程 专硕 +12 不知道叫什么! 2026-03-15 14/700 2026-03-16 16:45 by 我的船我的海
[基金申请] NSFC申报书里申请人简历中代表性论著还需要在申报书最后的附件里面再上传一遍吗 20+5 NSFC2026我来了 2026-03-10 14/700 2026-03-15 23:53 by 不负韶华的虎
[考博] 欢迎申博同学联系 +3 天道酬勤2026686 2026-03-10 7/350 2026-03-15 19:03 by 天道酬勤2026686
[考研] 274求调剂 +4 时间点 2026-03-13 4/200 2026-03-15 15:29 by Rambo13
[考研] 085601材料工程315分求调剂 +3 yang_0104 2026-03-15 3/150 2026-03-15 10:58 by peike
[考研] 材料工程327求调剂 +3 xiaohe12w 2026-03-11 3/150 2026-03-14 20:20 by ms629
[考研] 【0703化学调剂】-一志愿华中师范大学-六级475 +5 Becho359 2026-03-11 5/250 2026-03-14 11:35 by 哦哦123
[考研] 321求调剂 +3 CUcat 2026-03-10 3/150 2026-03-14 00:25 by JourneyLucky
[考研] b区环境工程求调剂 +4 Maps1 2026-03-10 6/300 2026-03-14 00:23 by JourneyLucky
[考研] 材料与化工(0856)304求B区调剂 +6 邱gl 2026-03-12 7/350 2026-03-13 23:24 by 邱gl
[考研] 281求调剂 +9 Koxui 2026-03-12 11/550 2026-03-13 20:50 by Koxui
[考研] 求调剂 +5 一定有学上- 2026-03-12 5/250 2026-03-13 18:31 by ms629
[考研] 考研调剂 +4 芬达46 2026-03-12 4/200 2026-03-13 16:04 by ruiyingmiao
[考研] 材料专硕350 求调剂 +4 王金科 2026-03-12 4/200 2026-03-13 16:02 by ruiyingmiao
[考研] 341求调剂 +4 捣蛋猪猪 2026-03-11 4/200 2026-03-12 14:47 by ruiyingmiao
[考研] 420求调剂 +4 莫向外求11 2026-03-10 6/300 2026-03-12 14:41 by ruiyingmiao
[考研] 290求调剂 +3 柯淮然 2026-03-10 8/400 2026-03-11 13:48 by 柯淮然
信息提示
请填处理意见