矩阵

矩阵的乘法:

Matrix:

乘法: A*B ,需要A的列数=B的行数

矩阵 C = A*B

则: C[i,j] = ∑A[i,k]*B[k,j]

 

 矩阵的乘法代码:

复制代码
//矩阵的乘法 

void mul(int A[][MAXN],int B[][MAXN])//A=A*B
{
        int R[MAXN][MAXN];
        memset(R,0,sizeof(R));
        for(int k=0;k<N;k++)
            for(int i=0;i<N;i++)if(A[i][k])
                for(int j=0;j<N;j++)
                    R[i][j]+=A[i][k]*B[k][j];
        /*
            如果取余可能能加快计算 
            int R[MAXN][MAXN];
            for(int i=0;i<N;i++)
                for(int j=0;j<N;j++)
                {
                    long long sum = 0;
                    for(int k=0;k<N;k++)
                        sum+=A[i][k]*B[k][j];
                    R[i][j]=sum%MOD;
                }
        */
        for(int i=0;i<N;i++)
            for(int j=0;j<N;j++)
                A[i][j]=R[i][j];
}
复制代码

 

矩阵快速幂模板:

复制代码
 1 #include<iostream>
 2 #include<cstring>
 3 using namespace std;
 4 
 5 int n, k, M;
 6 struct mat{
 7     int ma[65][65];
 8     mat() {memset(ma, 0, sizeof(ma));}//¹¹ÔìÁã¾ØÕó 
 9     mat(int a)  //¹¹Ô쵥λ¾ØÕó 
10     {
11         memset(ma, 0, sizeof(ma));
12         for(int i=0; i<n; i++)
13         ma[i][i] = 1;
14     }
15     void operator *= (const mat &x)//¾ØÕó³Ë·¨ 
16     {
17         mat tmp;
18         int i, j, k;
19         for( k=0; k<n; k++)
20         for( i=0; i<n; i++)
21         if(ma[i][k])
22         {   long long tot=0; 
23             for( j=0; j<n; j++)
24                 tot += ma[i][k]*x.ma[k][j];
25                 ma[i][j] = tot%M;
26         }
27         for(i=0; i<n; i++)
28         for(j=0; j<n; j++)
29         ma[i][j] = tmp.ma[i][j];
30     }
31 };
32 mat pow_mod(mat a, int b)//¾ØÕó¿ìËÙÃÝ 
33 {
34     mat tmp = mat(1);
35     while(b>0)
36     {
37         if(b&1) tmp*=a;
38         b>>=1;
39         a*=a;
40     }
41     return tmp;
42 }
43 
44 int main()
45 {
46     while(scanf("%d%d%d", &n, &k, &M)==3)
47     {
48         mat A, B;
49         for(int i=0; i<n; i++)
50         for(int j=0; j<n; j++)
51         scanf("%d", &A.ma[i][j]);
52         printf("\n\n");
53         mat ans = pow_mod(A, k+1);
54         for(int i=0; i<n; i++)
55         {
56             for(int j=0; j<n; j++)
57             printf("%8d", ans.ma[i][j]);
58             printf("\n");
59         }
60     }
61     return 0;
62 }
View Code
复制代码

 

posted @   草滩小恪  阅读(183)  评论(0编辑  收藏  举报
编辑推荐:
· 智能桌面机器人:用.NET IoT库控制舵机并多方法播放表情
· Linux glibc自带哈希表的用例及性能测试
· 深入理解 Mybatis 分库分表执行原理
· 如何打造一个高并发系统?
· .NET Core GC压缩(compact_phase)底层原理浅谈
阅读排行:
· 新年开篇:在本地部署DeepSeek大模型实现联网增强的AI应用
· DeepSeek火爆全网,官网宕机?本地部署一个随便玩「LLM探索」
· Janus Pro:DeepSeek 开源革新,多模态 AI 的未来
· 上周热点回顾(1.20-1.26)
· 【译】.NET 升级助手现在支持升级到集中式包管理
点击右上角即可分享
微信分享提示