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


POJ3233 Matrix Power Series 矩阵快速幂+二分求和

在看矩阵快速幂求和之前,我们先来看一下等比数列Sn=(a+a^2+a^3+...+a^n)mod M的求和取模: 实现代码如下: #include #include #include ...
  • AC_Gibson
  • AC_Gibson
  • 2015年06月09日 16:10
  • 468

poj 3233 Matrix Power Series 矩阵

#include #include #include #include #include #include using namespace std; #define LL __int64 ...
  • a601025382s
  • a601025382s
  • 2013年08月22日 21:13
  • 1224

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

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

矩阵十大经典题目之三-POJ-3233-Matrix Power Series-两次二分

如果k为偶数,那么(A+A^2+....A^K) = (A+...+A^K/2)+A^K/2*(A+...+A^K/2)    如果k为奇数,那么(A+A^2+....A^K) = (A+...+A...
  • rowanhaoa
  • rowanhaoa
  • 2014年03月11日 16:48
  • 1872

Matrix Power Series(乘法矩阵)

Description Given a n × n matrix A and a positive integer k, find the sum S = A + A2 + A3 + …...
  • userluoxuan
  • userluoxuan
  • 2014年08月06日 19:37
  • 515

poj 3233 --- Matrix Power Series (二分,矩阵)

Matrix Power Series Time Limit: 3000MS   Memory Limit: 131072K Total Submissions: 93...
  • zsc09_leaf
  • zsc09_leaf
  • 2012年03月22日 18:40
  • 1296

POJ 3233 Matrix Power Series(矩阵乘法)

#include #include #include ...
  • jichangzhen
  • jichangzhen
  • 2016年08月24日 21:21
  • 137

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

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

poj3233 - Matrix Power Series

原文转载:wangjian8006 原文网址:http://blog.csdn.net/wangjian8006/article/details/7868864 题...
  • w1300048671
  • w1300048671
  • 2015年04月28日 19:19
  • 203

【poj3233】 Matrix Power Series

http://poj.org/problem?id=3233 (题目链接)题意:给出一个n×n的矩阵A,求模m下A+A2+A3+…+AkA + A^2 + A^3+ … +A^k 的值Solution...
  • MashiroSky
  • MashiroSky
  • 2016年09月24日 17:12
  • 174
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Matrix Power Series
举报原因:
原因补充:

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