| ☆fibonacci数列 | ||
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
当对2求余时,循环节长度为3,对4求余时,循环节长度为3*2,
对8求余时,循环节长度为3*(2的平方)即3*(2^2),对16求余时,
循环节长度为3*(2^3)......
即对2^n求余,循环节长度为3*(2^(n-1)).
所以对于32768求余,循环节长度为32768/2*3=49152,
然后就不用多说了吧~~
#include <iostream>
using namespace std;
int main(int argc, char *argv[])
{
long long a[49153]={0,1,1,2,3},i,j,k;
for(i=5;i<=49153;i++)
{
a[i]=a[i-1]+a[i-2];
a[i]=a[i]%32768;
}
cin>>k;
cout<<a[k%49152]<<endl;
return 0;
}
本文介绍了一种高效计算斐波那契数列特定项的方法,通过对32768取模来简化计算过程,并利用循环节规律进一步优化算法。通过预计算循环节内的所有值并存储在一个数组中,只需简单的数组查找即可快速获得结果。
1587

被折叠的 条评论
为什么被折叠?



