poj3070

来源:互联网 发布:底火帽在淘宝叫什么 编辑:程序博客网 时间:2024/05/20 14:25

题目大意:

这里写图片描述
如上述公式所示,求Fn的最后4位数字

解题思路:

快速幂求得斐波那契数列的第n项,由于数据较大,还要记得要不断的对10000取模

代码如下:

#include<iostream>#include<cstdlib>#include<cstdio>#include<cstring>#include<algorithm>#include<cmath>using namespace std;struct prog{   int a[2][2];   void init()   {     a[0][0]=a[1][0]=a[0][1]=1;     a[1][1]=0;        }       };prog matrixmul(prog a,prog b){  int i,j,k;  prog c;  for(i=0;i<2;i++)  {    for(j=0;j<2;j++)    {      c.a[i][j]=0;      for(k=0;k<2;k++)      {        c.a[i][j]+=(a.a[i][k]*b.a[k][j]);                      }                      c.a[i][j]%=10000;    }                  }       return c;}prog mul(prog s,int k){  prog ans;  ans.init();  while(k>=1)  {    if(k&1)    {      ans=matrixmul(ans,s);           }               k=k>>1;    s=matrixmul(s,s);  }       return ans;}int main(){  int n;  while(cin>>n,~n)  {    if(!n)    {      cout<<0<<endl;      continue;          }              prog s;    s.init();    s=mul(s,n-1);    cout<<s.a[0][1]%10000<<endl;        }  return 0;    }
0 0
原创粉丝点击