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

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

# 使用递归的方式:(此方法比较耗时)

#include<stdio.h>
#include<math.h>
#define M 10007
long Fib(long n)
{
	if(n==1||n==2)
		return 1;
	else
		return (Fib(n-1)+Fib(n-2));
}

int main()
{
	long n;
	scanf("%ld",&n);

	printf("%ld",(Fib(n))%M);
	return 0;
}

第二种就是使用循环的方式

#include<stdio.h>

#define M 10007

int main()
{
	int a1,a2;
	a1=a2=1;
	int sum=0,temp;//sum是保存余数的变量 ,temp是为了方便交换数据 
	long n;//因为n>=1 and n<=1000000 
	scanf("%ld",&n);
	
	for(long i=1;i<=n;i++)
	{
		sum=a1%M;
		temp=a2;
		a2=(a1+a2)%M;
		a1=temp; 
	}
	printf("%d\n",sum);
	return 0;
} 


temp算是一个容器来使a1,a2变换;

上一篇:数据结构NOJ——23构造哈希表


下一篇:斐波那契数列对10007取余数