关于矩阵乘法
  • 板块学术版
  • 楼主xiaozhangma
  • 当前回复8
  • 已保存回复8
  • 发布时间2022/11/22 13:53
  • 上次更新2023/10/27 01:57:54
查看原帖
关于矩阵乘法
47911
xiaozhangma楼主2022/11/22 13:53

本蒟蒻刚刚接触矩阵乘法,在P1306 斐波那契公约数中,我使用的乘法如下:

Info operator * (const Info &x,const Info &y){
	Info now;
	F(i, 1, 2){
		F(j, 1, 2)now.a[i][j] = 0;
	}
	F(i, 1, 2){
		F(j, 1, 2){
			F(k, 1, 2){
				now.a[i][j] += (x.a[i][k] * y.a[k][j] % MOD);
				now.a[i][j] %= MOD;
			}
		}
	}
	return now;
}

看起来似乎非常的对,但在P5550 Chino的数列中,我按第一篇题解给出的方法构造了两个矩阵,相乘却得到了错误的矩阵。发现在这篇题解里,乘法是这样的:

jz operator * (const jz &a,const jz &b)//矩阵重载乘号 
{
    jz lin;
    for(int i=1;i<=80;++i)
    {
        for(int j=1;j<=80;++j)
        {
            lin.c[i][j]=0;
            for(int k=1;k<=80;++k)
            {
                lin.c[i][j]+=(a.c[k][j]*b.c[i][k]);//这一行不同
            }
        }
    }
    return lin;
}

按题解里的方法乘就对了,但没搞懂为什么。向各位大佬求教。

2022/11/22 13:53
加载中...