关闭

矩阵

275人阅读 评论(0) 收藏 举报

//今天写作业的时候 发现行列式太难写了,就写了简陋的C++来计算,算不算偷懒呢。。。

 

#include<stdio.h>

struct det
{
 int maxt[105][105];
};

det make(int x,int n,det d)
{
 det t;
 int i,j,k;
 for(i=0,k=0;i<n;i++)
    {
        if(i==x)continue;
  for(j=1;j<n;j++)
   t.maxt[j-1][k]=d.maxt[j][i];
        k++;
    }
 return t;
}

int dfs(int n,det d,int mod)
{
 int i,j,k;
 int ans=0;
 if(n==3)
 {
  int a,b;
  for(i=0;i<n;i++)
  {
   a=1,b=1;
   for(j=i,k=0;j<n+i;j++,k++)
   {
    a=(a*d.maxt[k][j%n]+mod)%mod;
    b=(b*d.maxt[k][(2*n-j)%n]+mod)%mod;
   }
   ans=(ans+a-b+mod)%mod;
  }
 }
 else if(n==2)
        ans=(ans+d.maxt[0][0]*d.maxt[1][1]-d.maxt[0][1]*d.maxt[1][0]+mod)%mod;
 else
 {

  for(i=0;i<n;i++)
        {
            if(i%2==0)
   ans=(ans+d.maxt[0][i]*dfs(n-1,make(i,n,d),mod)+mod)%mod;
   else
            ans=(ans-d.maxt[0][i]*dfs(n-1,make(i,n,d),mod)+mod)%mod;
        }

 }
 return (ans+mod)%mod;
}

 

int main()
{
 det d;
 int n,mod;
 int i,j;
 while(scanf("%d%d",&n,&mod)!=EOF)
 {
  for(i=0;i<n;i++)
   for(j=0;j<n;j++)
    scanf("%d",&d.maxt[i][j]);
  printf("%d\n",dfs(n,d,mod));
 }
 return 0;
}

 

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:10582次
    • 积分:639
    • 等级:
    • 排名:千里之外
    • 原创:54篇
    • 转载:1篇
    • 译文:0篇
    • 评论:0条