您的位置:首页 > 其它

hdu1575:Tr A_矩阵的幂&二分求幂

2013-03-08 22:13 344 查看
http://acm.hdu.edu.cn/showproblem.php?pid=1575

二维矩阵做参数,写在结构体里,优化;

#include <stdio.h>
#include <string.h>

struct Matrix
{
int m[12][12];
}a,b,c;

int n,m,i,j,k;
Matrix deal(Matrix a,Matrix b)           //基本的矩阵乘法
{
Matrix c;
for (i=0;i<n;i++)
{
for (j=0;j<n;j++)
{
c.m[i][j]=0;
for (k=0;k<n;k++)
{
c.m[i][j]+=a.m[i][k]*b.m[k][j];
}
c.m[i][j]%=9973;
}
}
return c;
}
Matrix pow(Matrix a,Matrix b)           //二分法求阶乘
{
while (m!=0)
{
if (m%2==1)
{
b=deal(a,b);
}
m/=2;
a=deal(a,a);
}
return b;
}
int main()
{//freopen("D:\\1.txt","r",stdin);
int t;
while (scanf("%d",&t)!=EOF)
{
while (t--)
{
scanf("%d%d",&n,&m);         //n阶矩阵,m次方
for (i=0;i<n;i++)
{
for (j=0;j<n;j++)
{
scanf("%d",&a.m[i][j]);     //a是目标矩阵
if (i==j)
{
b.m[i][j]=1;            //b是单位矩阵
}
else
b.m[i][j]=0;
}
}
c=pow(a,b);
int ans=0;
for (i=0;i<n;i++)
{
ans+=c.m[i][i];
}
printf("%d\n",ans%9973);
}
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: