矩阵的简单测试模板

来源:互联网 发布:淘宝迈克菲恩是正品吗 编辑:程序博客网 时间:2024/05/18 01:28

参考了雍学长的代码,写了一个模板,不是很完善。在初始化的时候我没有初始化为单位矩阵而是初始化为0矩阵(因为在做其他矩阵的运算时,用单位矩阵会出问题)。

下面是个函数的的意义:

void matrixPut(Matrix &temp):输出矩阵;                

void matrixBuild(Matrix &temp):自定义一个矩阵;

Matrix mat_pls(const Matrix & a,const Matrix &b):矩阵的加法;     

Matrix mat_mul(Matrix &a,Matrix &b):矩阵的乘法(注意这里形参不能用const,否则会出错);

Matrix fast_mod(Matrix a,int k):矩阵的快速幂(要先初始化矩阵为单位矩阵);


#include<cstdio>#include<cstring>#include<iostream>using namespace std;const int mod=0x3f3f3f3f;const int maxn=1e7+7;typedef long long ll;const int N=2;struct Matrix{    ll a[N][N];    Matrix(){        memset(a,0,sizeof(a));        //µ¥Î»¾ØÕó        /*for(int i=0;i<N;i++){            a[i][i]=1;        }*/    }};void matrixPut(Matrix &temp){    for(int i=0;i<N;i++){        for(int j=0;j<N;j++){            printf("%lld%c",temp.a[i][j],j==N-1?'\n':' ');        }    }}void matrixBuild(Matrix &temp){    for(int i=0;i<N;i++)        for(int j=0;j<N;j++)            scanf("%lld",&temp.a[i][j]);    //matrixPut(temp);}Matrix mat_pls(const Matrix & a,const Matrix &b){    Matrix ans;    for(int i=0;i<N;i++){        for(int j=0;j<N;j++)            ans.a[i][j]+=a.a[i][j]+b.a[i][j];    }    return ans;}Matrix mat_mul(Matrix a,Matrix &b){    Matrix ans;    for(int i=0;i<N;i++){        for(int j=0;j<N;j++){                for(int k=0;k<N;k++)                    ans.a[i][j]+=a.a[i][k]*b.a[k][j]%mod;        }    }    return ans;}Matrix fast_mod(Matrix &a,int k){    Matrix ans;    for(int i=0;i<N;i++)ans.a[i][i]=1;    while(k){        if(k&1)ans=mat_mul(a,ans);        a=mat_mul(a,a);        k=k>>1;    }    return ans;}int main(){    Matrix m1,m2,m3,m4;    printf("please input matrix1:\n");    matrixBuild(m1);   // matrixPut(m1);    printf("please input matrix2:\n");    matrixBuild(m2);    //matrixPut(m1);    //m3=mat_pls(m1,m2);    //matrixPut(m3);    m3=mat_mul(m1,m1);    matrixPut(m3);    int k;    printf("input k: \n");    scanf("%d",&k);    m4=fast_mod(m1,k);    matrixPut(m4);    return 0;}



0 0
原创粉丝点击