欧拉计划问题二十五matlab实现

Problem 25 : 1000-digit Fibonacci number

The Fibonacci sequence is defined by the recurrence relation:

F_{n}= F_{n-1} + F_{n-2}, where F_{1}  = 1 and F_{2}= 1.

Hence the first 12 terms will be:

F_{1} = 1
F_{2} = 1
F_{3} = 2
F_{4} = 3
F_{5} = 5
F_{6} = 8
F_{7} = 13
F_{8} = 21
F_{9} = 34
F_{10} = 55
F_{11} = 89
F_{12} = 144

The 12th term, F_{12}, is the first term to contain three digits.

What is the index of the first term in the Fibonacci sequence to contain 1000 digits?

思路 :

斐波那契数列的题我们在之前的欧拉计划好像遇到过了,所以一看到这个题目,心里边美滋滋,因为斐波那契数列的思想我早已心知肚明了,这个成语放在这用好像有点不太合适,但暂且先这样吧!马上敲下matlab的代码!

clear,clc
tic
j = 3;
a = 1;
b = 1;
c = 0;
while c < 10^2
    c = b + a;
    if c < 10^2
        a = b;
        b = c;
        j = j + 1;
    else
        break
    end   
end
disp(j);
toc

运行结果1477,很开心,转到欧拉计划的页面填入答案,说时迟,那时快!一个辣眼睛的红叉叉出现,我不信,再试了一遍,结果我就不说了。为什么呢?回到matlab的界面,调开变量框,发现位数超过308位,matlab就会显示Inf.

那可怎么办呢?查资料ing.............,终于在这找到了灵感,见下图

 

不好意思,拿错了,不过这正好也是自然中的斐波那契数列,就不修改了,见下图

nice,还有这种操作,每个斐波那契数都可以用图中从上往下第二个公式表示,再推导一下!

                                                                       \frac{\varphi ^{n}}{\sqrt5} > 10^{999}

两边取对数

                                                                \frac{\log_{10} n}{\log_{10} \varphi } - \log_{10} \sqrt5 > \log_{10} 999

其中                                                             \varphi = \frac{(\sqrt5 + 1)}{2}

把它写成关于n的表达式就行了。

其实也可以计算器算!

代码 :

clear,clc
tic
n = ceil((1000-1 + log10(5)/2)/log10((1+sqrt(5))/2));
toc
disp(n)

 结果 :4782

 

                                                                

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值