C++ Fibonaci数列
Fibonaci数列
问题描述
Fibnacci数列的递推公式是:Fn = Fn - 1 + Fn - 2 = 1,其中F1 = F2 = 1。
输入格式
输入包括一个整数n
输出格式
输出一行包括一个整数n,表示Fn除以10007的余数
样例输入
22
样例输出
7704
数据规模与约定
n >= 1 && n <= 1000000
方法一:递归
(直接求出第n项后再求余)
这是最直接的求解方法,代码简洁,但是n的数据规模太大的话,消耗的时间和计算机的工作量都很大,所以递归并不是最优解。
#include<iostream>
#include<math.h>
using namespace std;
const int i = 10007;
long Fib(long n)
{
if(n == 1 || n == 2)
{
return 1;
}
else
{
return (Fib(n -1) + Fib(n -2));
}
}
int main()
{
long n;
cin>>n;
cout<<Fib(n) % i<<endl;
system("pause");
return 0;
}
方法三:循坏
(利用中间变量求解)
求余运算存在定理:求Fn % 10007,就是求(n1 + n2) % 10007,也是(n1 % 10007 + n2 % 10007)% 10007
#include<iostream>
#include<math.h>
using namespace std;
const int i = 10007;
int main()
{
int n1 = 1,n2 =1;
int count = 0,temp;
long n;
cin>>n;
for(long j = 1;j <= n;j++)
{
count = n1 % i;
temp = n2;
n2 = (n1 + n2) % i;
n1 = temp;
}
cout<<count<<endl;;
system("pause");
return 0;
}