其他分享
首页 > 其他分享> > 菲波那契数列

菲波那契数列

作者:互联网

菲波那契数列是指这样的数列: 数列的第一个和第二个数都为1,接下来每个数都等于前面2个数之和。
给出一个正整数a,要求菲波那契数列中第a个数对1000取模的结果是多少。

输入

第1行是测试数据的组数n,后面跟着n行输入。每组测试数据占1行,包括一个正整数a(1 <= a <= 1000000)。

输出

n行,每行输出对应一个输入。输出应是一个正整数,为菲波那契数列中第a个数对1000取模得到的结果。

样例

输入

4
5
2
19
1

输出

5
1
181
1

【参考代码I】

#include<bits/stdc++.h>
using namespace std;
long long a[10001];
int main()
{
	long long n;
	cin>>n;
	for(long long i=0; i<n; i++)
	{
		long long k;
		cin>>k;
		long long a1,a2,a3;
		a1=a2=1;
		long long j;
		for (j=3; j<=k; j++)
		{
			a3=a1+a2;
			a1=a2;
			a2=a3;
			a1=a1%1000;
			a2=a2%1000;
			a3=a3%1000;
		}
		if (k==1)
			a[i]=1;
		else if (k==2)
			a[i]=1;
		else
			a[i]=a3%1000;
	}
	for(long long i=0; i<n; i++)
		printf("%d\n",a[i]);

	return 0;
}

这边的话数组大小直接定义了10000多,我们我可使用滚动数组,节省内存

【参考代码II】

#include<bits/stdc++.h>
using namespace std;
int a[4];
int main()
{
	int n;
	cin>>n;
	for(int i=1; i<=n; i++)
	{
		a[1]=a[2]=1;
		a[3]=2;
		int s;
		cin>>s;
		for(int j=4; j<=s; j++)
		{
			a[1]=a[2];
			a[2]=a[3];
			a[3]=(a[2]+a[1])%1000;
		}
		if(s==1)
			cout<<1<<endl;
		else if(s==2)
			cout<<1<<endl;
		else
			cout<<a[3]<<endl;
	}
}

标签:正整数,数列,int,long,菲波,那契
来源: https://blog.csdn.net/absWC/article/details/122385321