很好用的矩阵快速幂,给自己留模版<转,原地址忘了>

#include<stdio.h>
#define Max 2
#define kmod 7
typedef struct Matrix{
    int M[Max][Max];
}Matrix;
Matrix P;           //等比矩阵,在main中修正;
Matrix I={1,0,
          0,1}; //单位矩阵,需根据Max扩大;
Matrix Matrixmul(Matrix a,Matrix b){  //矩阵乘法;
    Matrix ret;
    int i,j,k;
    for(i=0;i<Max;i++)
        for(j=0;j<Max;j++)
        {
            ret.M[i][j]=0;
            for(k=0;k<Max;k++)
                ret.M[i][j]+=(a.M[i][k]*b.M[k][j])%kmod;
            ret.M[i][j]%=kmod;
        }
    return ret;
}
Matrix quickpow(__int64 n){     // 快速幂;
    Matrix m=P,b=I;
    while(n>0){
        if(n&1)
            b=Matrixmul(b,m);
        n>>=1;
        m=Matrixmul(m,m);
    }
    return b;
}

posted on 2012-09-12 19:36 彭托 阅读(287) 评论(0)  编辑 收藏 引用


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理


<2024年12月>
24252627282930
1234567
891011121314
15161718192021
22232425262728
2930311234

导航

统计

常用链接

留言簿

随笔档案

搜索

最新评论

阅读排行榜

评论排行榜