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;
}


版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

POJ3233Matrix Power Series

这道题的思路在于不断地将其二分,注意k是奇数还是偶数 #include #include #include #define LL long long using namespace std; con...

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,则如何...

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

既然难忘记,不如就让时光与回忆彼此相安

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

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

POJ 3233 Matrix Power Series 【矩阵快速幂+等比矩阵】

题目连接 : http://poj.org/problem?id=3233——————————————————-Matrix Power Series Time Limit: 3000MS ...

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(矩阵等比数列求和)

题意就是一个等比数列求和的意思,只不过每一项都是矩阵这里需要进行一下转移矩阵的构造,形成一个递推累加的效果:设 B = (A,I;0,I)则B^(k + 1) = (A^(k + 1),I + A +...

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

矩阵的又一个新用法,构造矩阵进行快速幂。 比如拿 nyoj299 Matrix Power Series 来说 给出这样一个递推式: S = A + A2 + A3 + … + Ak. ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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