您的位置:首页 > 其它

UVa 10229 - Modular Fibonacci(数论,规律)

2013-07-24 19:03 393 查看
DC翻出以前做的好多题,其中这个题让DC纠结了一段时间,因为乍眼一看没有任何思路,看代码也没什么想法,然后在纸上算了算,突然想起以前的计算过程,然后豁然开朗

DC总结的规律:fib数列对2^m取模的循环节为3*(2^(m-1))

#include <stdio.h>

using namespace std;
int fib[22][2000000];
int main()
{
int m,n;
for(int i=1;i<=20;i++)
{
fib[i][0]=0;
fib[i][1]=1;
int k=1<<i;
for(int j=2;j<3*(1<<i-1);j++)
fib[i][j]=((fib[i][j-1])%k+(fib[i][j-2])%k)%k;
}
while(scanf("%d%d",&n,&m)==2)
{
if(!m) printf("0\n");
else
printf("%d\n",fib[m][n%(3*(1<<m-1))]);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: