矩阵

POJ 3070 Fibonacci

http://poj.org/problem?id=3070

题意:求矩阵的n此幂
分析:二分求

#include<stdio.h>

struct matrix

{

    int a[2][2];

    matrix()

    {

        a[0][0]=a[0][1]=a[1][0]=1;

        a[1][1]=0;

    }

};



matrix multi(matrix a,matrix b)

{

    matrix temp;

    for(int i=0;i<2;i++)

    {

        for(int j=0;j<2;j++)

        {

            temp.a[i][j]=0;

            for(int k=0;k<2;k++)

            {

                temp.a[i][j]+=a.a[i][k]*b.a[k][j];

            }

            if(temp.a[i][j]>=10000)

               temp.a[i][j]%=10000;

        }

    }

    return temp;

}

matrix power(int n)

{

    matrix temp,s;

    temp.a[0][0]=temp.a[1][1]=1;

    temp.a[1][0]=temp.a[0][1]=0;

    while(n!=0)

    {

        if(n&1)

          temp=multi(temp,s);

        n=n>>1;

        s=multi(s,s);

    }

    return temp;

}



int main()

{

    int n;

    while(scanf("%d",&n))

    {

        if(n==-1) break;

        matrix ans=power(n);

        printf("%d\n",ans.a[0][1]);

    }

    return 0;

}
View Code

 

你可能感兴趣的:(矩阵)