1. 程式人生 > >BEGIN-4 Fibonacci數列

BEGIN-4 Fibonacci數列

問題描述
Fibonacci數列的遞推公式為:Fn=Fn-1+Fn-2,其中F1=F2=1。
當n比較大時,Fn也非常大,現在我們想知道,Fn除以10007的餘數是多少。
輸入格式
輸入包含一個整數n。
輸出格式
輸出一行,包含一個整數,表示Fn除以10007的餘數。

思路:因為要求的是餘數,所以只保留餘數就可以了。使用陣列儲存之前的餘數可以減少運算時間。 
啟發:當執行時間過長時,可以犧牲一定的空間來使時間減少。 

解法1:

#include<iostream>
 int main()
 {
 	int n;
 	std::cin>>n;
 	int *p=new int[n];
 	p[0]=1;
 	p[1]=1;
 	if(n==1||n==2)
 	{
 		std::cout<<1;
	 }
	 else
	 {
	 	int i;
	 	for(i=2;i<n;i++)
	 	{
	 		p[i]=(p[i-1]+p[i-2])%10007;//使用遞迴的話每次都要從頭算起,浪費時間。 
		 }
		 std::cout<<p[n-1];
	 }
 	return 0;
 }

解法2:

#include<iostream>
int main()
{
	int n,a=1,b=1,c,i;
	std::cin>>n;
	if(n==1||n==2)
	{
		std::cout<<1;
	}
	else
	{
	for(i=3;i<=n;i++)
	{
		c=a+b;
		a=b;
		c=c%10007;
		b=c;
	}
	std::cout<<c;
	}
	return 0;
 }