HDU1005 Number Sequence

#include <cstdio>
using namespace std;
typedef struct
{
    long long m[2][2];
}matrix;
matrix I={1,0,0,1};
matrix mul(matrix a,matrix b)
{
    int i,j,k;
    matrix c;
    for(i=0;i<2;i++)
      for(j=0;j<2;j++)
      {
          c.m[i][j]=0;
          for(k=0;k<2;k++)
            c.m[i][j]+=((a.m[i][k]%7)*(b.m[k][j]%7))%7;
          c.m[i][j]%=7;
      }
      return c;
}
matrix quick_mod(int n,int A,int B)
{
    matrix a={A,B,1,0};
    matrix b=I;
    while(n>=1)
    {
        if(n&1)
          b=mul(a,b);
        n=n>>1;
        a=mul(a,a);
    }
    return b;
}
int main()
{
    int a,b,n;
    while(scanf("%d%d%d",&a,&b,&n))
    {
        if(a==0&&b==0&&n==0) break;
        if(n==2)  printf("1\n");
        else
        {
             matrix temp=quick_mod(n-2,a,b);
             printf("%d\n",(temp.m[0][0]+temp.m[0][1])%7);
        }


    }
    return 0;
}

你可能感兴趣的:(HDU1005 Number Sequence)