图片发自简书App

问题描述

Fibonacci数列的递推公式为:F(n)=F(n-1)+F(n-2),其中F(1)=F(2)=1。

当n比较大时,Fn也非常大,现在我们想知道,Fn除以10007的余数是多少。

默认规定:

1<= n <=1000000

分析一

根据斐波那契递推公式可以写出递归函数,求出F(n)对10007取余即可。

int fibon(int n)

{

if(n<=2)

return 1;

else

return fibon(n-1) + fibon(n-2);

}

挺简单的,直接调用试一下:

int main()

{

int n;

scanf("%d", &n);

printf("%d", fibon(n)%10007);

return 0;

}

结果在快写代码中测试,在第四项以后都超时。。。

图片发自简书App

分析二

上面求斐波那契数列用的是递归,由于递归有重复操作可能耗时比较长,导致测试超时。

将递归修改成循环会不会不超时呢?

int fibon(int n)

{

int fn = 1, fn1 = 1, fn2 = 1;

if(n>2)

{

for(int i=2; i

{

fn = fn1 + fn2;

fn2 = fn1;

fn1 = fn;

}

}

return fn;

}

主函数调用方法同上,不再重复,结果。。。测试项4之后未通过。。。

图片发自简书App

分析三

测试上面代码,再加上n的大小规定,猜想可能是int的范围不够大,所以将代码中int替换为double。

#include

#include

double fibon(int n)

{

double fn = 1, fn1 = 1, fn2 = 1;

if(n>2)

{

for(int i=2; i

{

fn = fn1 + fn2;

fn2 = fn1;

fn1 = fn;

}

}

return fn;

}

int main()

{

int n;

scanf("%d", &n);

double sha = floor(fibon(n)/10007);

printf("%.0lf", fibon(n)-sha*10007);

return 0;

}

结果比上面好一点,不过还是有通不过的。。。

图片发自简书App

分析四

本题最终结果是求余数,fn的结果10007001和1是一样的,所以最终应该改造斐波那契数列的求值。

int fibon(int n, int yu)

{

int fn = 1, fn1 = 1, fn2 = 1;

if(n>2)

{

for(int i=2; i

{

fn = (fn1 + fn2)%yu;

fn2 = fn1;

fn1 = fn;

}

}

return fn;

}

调用也相对简单:

int main()

{

int n;

scanf("%d", &n);

printf("%d", fibon(n, 10007));

return 0;

}

结果自然是通过,100分!

图片发自简书App

总结

题目其实描述的挺清楚的:

fn比较大、n的取值范围比较大

其实可以猜测普通的暴力求解是解不出来的。

工具分享

斐波那契数列除以10007的余数C语言,C语言之不一样的斐波那契数列相关推荐

  1. 蓝桥杯算法:斐波那契求Fn除以10007的余数

    时间限制: 1.0s 内存限制: 512.0MB [问题描述] Fibonacci数列的递推公式为:Fn=Fn-1+Fn-2,其中F1=F2=1. 当n比较大时,Fn也非常大,现在我们想知道,Fn除以 ...

  2. Fibonacci数列的递推公式为:Fn=Fn-1+Fn-2,其中F1=F2=1。当n比较大时,Fn也非常大,现在我们想知道,Fn除以10007的余数是多少。(python)

    Fibonacci数列的递推公式为:Fn=Fn-1+Fn-2,其中F1=F2=1.当n比较大时,Fn也非常大,现在我们想知道,Fn除以10007的余数是多少. 刚开始做 def svd(n):if(n ...

  3. Fn除以10007的余数是多少

    1/24 问题: 头文件声明 输入输出 int main return 0 #define printf   scanf & for.函数里不能声明变量 问题描述 Fibonacci数列的递推 ...

  4. 斐波那契数列除10007求余数

    题目: 分析: ①采用递归或者递推的方法写出斐波那契数列,从而方便得出余数. ②斐波那契数列从第三项开始,每项都是前两项之和. 即Fib(n)=Fib(n-1)+Fib(n-2) (N>=3) ...

  5. python斐波那契数列前20项_兔子繁殖问题带来的智商碾压:斐波那契数列趣谈

    本文来自公众号:超级数学建模 微信号 :supermodeling 原文标题:斐波那契数列趣谈 via 善科 by BB 一般认为斐波那契数列的提出是基于兔子的繁殖问题:如果一开始有一对兔子,它们每月 ...

  6. 不许用%和/来实现求任意数除以3的余数

    转载请注明出处,声明如下: 作者:peizhongyou 前几天参加一个编程竞赛,涉及到部分位运算的知识,准备不足挂了.事后在网上搜了一下位运算的介绍看到<位运算之美>这篇博客,其中提到了 ...

  7. 数列的定义如下: 数列的第一项为n,以后各项为前一项的平方根,求数列的前m项的和

    /** 数列的定义如下: 数列的第一项为n,以后各项为前一项的平方根,求数列的前m项的和. 输入数据有多组,每组占一行,由两个整数n(n<10000)和m(m<1000)组成,n和m的含义 ...

  8. 数列的第一项为n,以后各项为前一项的平方根,求数列的前m项的和。(java)

    数列的定义如下: 数列的第一项为n,以后各项为前一项的平方根,求数列的前m项的和. 输入数据有多组,每组占一行,由两个整数n(n<10000)和m(m<1000)组成,n和m的含义如前所述 ...

  9. 1051: 平方根的和 数列的定义如下: 数列的第一项为item,以后各项为前一项的平方根,求数列的前n项的和。

    C++ 数列的定义如下: 数列的第一项为item,以后各项为前一项的平方根,求数列的前n项的和. #include<iostream> using namespace std; #incl ...

最新文章

  1. 总结:DCIC算法分析赛完整方案分享!
  2. jpa执行mysql存储过程_基于Spring Boot,使用JPA调用Sql Server数据库的存储过程并返回记录集合...
  3. 前端学习(2585):前端怎么在响应头和请求头里面拿数据?
  4. 微服务、Kubernetes和无服务器之后,即将发生的……
  5. linux mint下安装vnc,VNC远程连接Linux mint桌面
  6. Android投屏利器vysor
  7. linux之正则匹配命令学习笔记
  8. 记录一下我的蓝牙遥控小车
  9. 【计算机网络】传输层 : 传输层概述 ( 设备层级 | 传输层功能 | TCP 协议 | UDP 协议 | 复用与分用 | 端口号 | 套接字 )
  10. P1359 租用游艇
  11. 前端面试题,速看webP,把握住网页提速小细节!亲测可用!
  12. exter与static的用法
  13. antd自定义样式主题
  14. 欧拉是如何计算圆周率的
  15. P2905 [USACO08OPEN]农场危机Crisis on the Farm-dp
  16. android 360加固保
  17. 超级无敌qmail安装大法,详尽之极
  18. ebay架构师总结伸缩性要旨!!
  19. php mysql utf 8_PHP+MySQL中对UTF-8,UTF8(utf8),set names gbk 的理解
  20. 有隔板高效过滤器和无隔板高效过滤器区别在哪里

热门文章

  1. python --去除人像背景(抠图)
  2. 详解flex布局(flexbox)完整指南
  3. stm32f103c8t6 + 串口打印 + dh1
  4. ps创意合成,制作鲨鱼在橙子“海洋”里游泳的创意画面
  5. 九宫幻方(C语言代码)
  6. 懒人图片浏览(image galleries,相册)功略——highslide篇
  7. 【去除控制】对学生机房管理助手6.8 密码破解的分析
  8. 买天猫店铺网店转让重新设计
  9. vue.js 三种方式安装
  10. 关于Java写给自己的话