A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

问题描述: Fiboracci数列的地推公式为:Fn=F(n-1)+F(n-2),其中F1=F2=1;当n比较大时,Fn也非常大,现在我们想知道,Fn除以10007的余数是多少?n的范围是1<=n<=1,000,000;
       由于n非常大,如果把Fn的值算出来,数值非常大,变量不能保存很多位,所以,每求一次Fn的时候,都%10007,最后即可求出的Fn的余数,详细见代码;
  1. #include<stdio.h>
  2. int f(int n)
  3. {
  4.     int f1,f2,f3;
  5.     f1=1;
  6.     f2=1;
  7.     if(n<=2)
  8.     return 1;
  9.     else if(n>=3)
  10.     {
  11.         for(int i=3;i<=n;i++)
  12.         {
  13.              f3=(f1+f2)%10007;
  14.              f1=f2;
  15.              f2=f3;
  16.         }
  17.        return f3;
  18.     }
  19. }
  20. int main()
  21. {
  22.      int n;
  23.      scanf("%d",&n);
  24.      printf("%d",f(n));
  25.      return 0;
  26. }
复制代码



4 个回复

正序浏览
围观,学习学习
回复 使用道具 举报
围观,学习学习
回复 使用道具 举报
wpf986530062 发表于 2015-10-16 13:20
表示现在还看不懂。。。好强大哦

以前的做的,笔记上得一道题目,敲出来分享一下,现在都忘很多了
回复 使用道具 举报
表示现在还看不懂。。。好强大哦
回复 使用道具 举报 1 0
您需要登录后才可以回帖 登录 | 加入黑马