矩阵快速幂

来源:互联网 发布:python小甲鱼视频 编辑:程序博客网 时间:2024/06/05 16:08
矩阵快速幂:求一个矩阵的幂
知识点参考该链接http://www.myexception.cn/arithmetic/1847338.html
#include <stdio.h>
#include <string.h>


typedef struct mar
{
    __int64 matrix[2][2];
} Mar;


void print(Mar a)
{
    int i,j;
    for(i=0; i<2; i++)
    {
        for(j=0; j<2; j++)
        {
            printf("%d ",a.matrix[i][j]);
        }
        printf("\n");
    }
}


Mar mul(Mar a,Mar b)
{
    Mar temp;
    int i,j,k;
    for(i=0; i<2; i++)
    {
        for(j=0; j<2; j++)
        {
            temp.matrix[i][j]=0;
            for(k=0; k<2; k++)
            {
                temp.matrix[i][j]+=(a.matrix[i][k]*b.matrix[k][j]);
            }
        }
    }
    return temp;
}
Mar power(Mar mar,int n)
{
    Mar mt;
    mt.matrix[0][0]=mt.matrix[1][1]=1;
    mt.matrix[0][1]=mt.matrix[1][0]=0;
    while(n)
    {
        if(n&1)
            mt=mul(mar,mt);
        mar=mul(mar,mar);
        n=n/2;
    }
    return mt;
}
int main()
{
    Mar m;
    int i,j,n;
    scanf("%d%d%d%d",&m.matrix[0][0],&m.matrix[0][1],&m.matrix[1][0],&m.matrix[1][1]);
    Mar c=m;
    scanf("%d",&n);
    c=power(c,n);
    print(c);
    return 0;
}