矩阵快速幂 POJ 3070

题意:算出Fn,矩阵.,就是求矩阵的n次方,先定义矩阵乘法,再快速幂就解决了。

#include<stdio.h>
#include<cstring>
#include<iostream>
#define ll long long
using namespace std;
struct matix
{
  int a[2][2];
  matix()//构造函数,初始化
  {
    for(int i=0;i<2;i++)
    {
      for(int j=0;j<2;j++)
      {
        a[i][j]=0;
      }
    }
  }
};
matix operator *(matix a,matix b)//重载乘号
{
  matix t;
  for(int i=0;i<2;i++)
  {

    for(int j=0;j<2;j++)
    {
      for(int k=0;k<2;k++)
      {
        t.a[i][j]+=a.a[i][k]*b.a[k][j]%10000;
      }
    }
  }
  return t;
}
matix quick(matix a,int b)
{
  matix ret;
  ret.a[0][0]=1;
  ret.a[1][1]=1;
  while (b!=0)
  {
i    f(b&1)
    {
      ret=ret*a;
    }
    a=a*a;
    b>>=1;
  }
return ret;
}
int main ()
{
  int t;
  while (scanf("%d",&t)!=EOF)
  {
    if(t==-1)
    {
      break;
    }

    matix k;
    k.a[0][0]=k.a[0][1]=k.a[1][0]=1;
    matix temp=quick(k,t);
    cout<<temp.a[1][0]%10000<<endl;
  }
return 0;
}

posted @ 2016-08-02 09:13  BaiMaSangBu  阅读(142)  评论(0编辑  收藏  举报