Matrix Power Series

原创 2012年03月31日 12:52:12

#include <iostream>
#include <cstdio>

using namespace std;

struct M
{
   int n;
   int m[30][30];
   M(){
	   for(int i=0;i<30;i++)
		   for(int j=0;j<30;j++)
			   m[i][j]=0;
   }
};
int mod;
M orginal;

M mul(M a,M b)
{
	M c;c.n=orginal.n;
	for(int i=0;i<a.n;i++)
		for(int j=0;j<a.n;j++)
			for(int k=0;k<a.n;k++)
				c.m[i][j]=(c.m[i][j]+a.m[i][k]*b.m[k][j])%mod;
	return c;
}

M quick(int k)
{
	if(k==1)return orginal;
	if(k%2)
	{
		M c=quick(k/2);c.n=orginal.n;
		return mul(mul(c,c),orginal);
	}
	else 
	{
		M c= quick(k/2);c.n=orginal.n;
		return mul(c,c);
	}
	return orginal;
}

M add(M a,M b)
{
	M c;c.n=a.n;
	for(int i=0;i<a.n;i++)
		for(int j=0;j<a.n;j++)
			c.m[i][j] = (a.m[i][j]+b.m[i][j])%mod;
	return c;
}

M longquick(int k)
{
	if(k==1) return orginal;
	if(k==2) return add(orginal,mul(orginal,orginal));
	if(k%2)
	{
		M temp = longquick(k/2);temp.n=orginal.n;
		M en = quick(k/2+1);en.n=orginal.n;
		return add(temp,add(en,mul(en,temp)));
	}
	else
	{
		M temp = longquick(k/2);temp.n=orginal.n;
		return add(temp,mul(temp,quick(k/2)));
	}
	return orginal;
}

void print(M a)
{
	for(int i=0;i<a.n;i++)
	{
		for(int j=0;j<a.n;j++)
		{
		    if(j==0) {cout<<a.m[i][j];continue;}
			else cout<<" "<<a.m[i][j];
		}
		cout<<endl;
	}
}
void init()
{
	int n,k;
	while(cin>>n>>k>>mod)
	{
		orginal.n=n;
		for(int i=0;i<n;i++)
			for(int j=0;j<n;j++)
			{
				cin>>orginal.m[i][j];
			}
	M c=longquick(k);
	print(c);
	}


}

int main()
{
	init();
	return 0;
}


相关文章推荐

构造矩阵解决问题 【nyoj299 Matrix Power Series】

矩阵的又一个新用法,构造矩阵进行快速幂。 比如拿 nyoj299 Matrix Power Series 来说 给出这样一个递推式: S = A + A2 + A3 + … + Ak. ...

POJ 3233 Matrix Power Series(构造矩阵加矩阵快速幂)

题意是给你一个n×n的矩阵A,要求A+A

POJ3233Matrix Power Series

这道题的思路在于不断地将其二分,注意k是奇数还是偶数 #include #include #include #define LL long long using namespace std; con...
  • zh9406
  • zh9406
  • 2014年12月22日 14:33
  • 294

POJ 3233 Matrix Power Series(矩阵的快速幂)

Matrix Power Series Time Limit: 3000MS   Memory Limit: 131072K Total Submissions: 17...

POJ 3233 Matrix Power Series (矩阵快速幂)

大致题意:简单题意就不解释了。    不过可以建议大家可以先做POJ 3070,先学会快速幂的基本思想。 没有做过的可以查看我的博客:点击打开链接 然后我们已经会使用矩阵快速幂求解A^k,则如何...

204_矩阵乘幂多项式 Matrix power series (POJ 3233)

给定一个nXn的矩阵A 和正整数k,m。如果  S=A+A^2+A^3+.........A^k, 求个元素对吗取余数后的结果。 同样,根据矩阵递推出关于k的式子,用乘幂的方法解决。 ...

POJ 3233 Matrix Power Series(矩阵快速幂+二分)

题目地址:POJ 3233 题目大意:给定矩阵A,求A + A^2 + A^3 + … + A^k的结果(两个矩阵相加就是对应位置分别相加)。输出的数据mod m。k     这道题两次二分,相当...

Matrix Power Series(?)

真的是,很多时候一个小错误看不出来,一觉睡醒就好了

POJ 3233 Matrix Power Series 解题报告(子矩阵构造+矩阵快速幂)

Matrix Power Series Time Limit: 3000MS   Memory Limit: 131072K Total Submissions: 14...
  • kbdwo
  • kbdwo
  • 2014年04月24日 20:11
  • 610

POJ Matrix Power Series (矩阵快速幂+二分)

题意:矩阵求和 分析:如果用矩阵快速幂直接把每一项求出来相加会超时。可利用公式,使用二分 快速求出      (1)当时, (2)当时,那么有      (3)当时,那么有  ...
  • w20810
  • w20810
  • 2015年02月04日 14:31
  • 394
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Matrix Power Series
举报原因:
原因补充:

(最多只允许输入30个字)