矩阵快速幂:求一个矩阵的幂
知识点参考该链接http://www.myexception.cn/arithmetic/1847338.html
#include <stdio.h>
#include <string.h>
typedef struct mar
{
__int64 matrix[2][2];
} Mar;
void print(Mar a)
{
int i,j;
for(i=0; i<2; i++)
{
for(j=0; j<2; j++)
{
printf("%d ",a.matrix[i][j]);
}
printf("\n");
}
}
Mar mul(Mar a,Mar b)
{
Mar temp;
int i,j,k;
for(i=0; i<2; i++)
{
for(j=0; j<2; j++)
{
temp.matrix[i][j]=0;
for(k=0; k<2; k++)
{
temp.matrix[i][j]+=(a.matrix[i][k]*b.matrix[k][j]);
}
}
}
return temp;
}
Mar power(Mar mar,int n)
{
Mar mt;
mt.matrix[0][0]=mt.matrix[1][1]=1;
mt.matrix[0][1]=mt.matrix[1][0]=0;
while(n)
{
if(n&1)
mt=mul(mar,mt);
mar=mul(mar,mar);
n=n/2;
}
return mt;
}
int main()
{
Mar m;
int i,j,n;
scanf("%d%d%d%d",&m.matrix[0][0],&m.matrix[0][1],&m.matrix[1][0],&m.matrix[1][1]);
Mar c=m;
scanf("%d",&n);
c=power(c,n);
print(c);
return 0;
}
知识点参考该链接http://www.myexception.cn/arithmetic/1847338.html
#include <stdio.h>
#include <string.h>
typedef struct mar
{
__int64 matrix[2][2];
} Mar;
void print(Mar a)
{
int i,j;
for(i=0; i<2; i++)
{
for(j=0; j<2; j++)
{
printf("%d ",a.matrix[i][j]);
}
printf("\n");
}
}
Mar mul(Mar a,Mar b)
{
Mar temp;
int i,j,k;
for(i=0; i<2; i++)
{
for(j=0; j<2; j++)
{
temp.matrix[i][j]=0;
for(k=0; k<2; k++)
{
temp.matrix[i][j]+=(a.matrix[i][k]*b.matrix[k][j]);
}
}
}
return temp;
}
Mar power(Mar mar,int n)
{
Mar mt;
mt.matrix[0][0]=mt.matrix[1][1]=1;
mt.matrix[0][1]=mt.matrix[1][0]=0;
while(n)
{
if(n&1)
mt=mul(mar,mt);
mar=mul(mar,mar);
n=n/2;
}
return mt;
}
int main()
{
Mar m;
int i,j,n;
scanf("%d%d%d%d",&m.matrix[0][0],&m.matrix[0][1],&m.matrix[1][0],&m.matrix[1][1]);
Mar c=m;
scanf("%d",&n);
c=power(c,n);
print(c);
return 0;
}