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;
}
posted @ 2021-07-09 16:01  小芦荟同学  阅读(124)  评论(0编辑  收藏  举报