数论 快速矩阵幂 POJ 3233 Matrix Power Series 二分和

题意:给出矩阵A,求S = A + A^2 + A^3 + … + A^k ,n为矩阵

题解:

矩阵快速幂  写出矩阵 * 与+的功能

二分求和


#include 
#include 
#include 
using namespace std;
const int N=33;
int n,mod;
struct mat{
	//矩阵 
	int n,at[N][N];
	mat(int n=0){
		this->n=n;
		memset(at,0,sizeof(at));
	}
	mat operator *(mat b){
		mat tmp=mat(n);
		for(int i=0;i>=1;
	}
	return e;
}
mat sum(mat d,int k){
	if(k==1) return d;
	if(k&1){//奇数  
//	printf("=%d\n",k);	
		// d^k+上一步累计下来的和 
		return expo(d,k)+sum(d,k-1); 
	}
	else {  //偶数 
//	printf("-%d\n",k);
		mat s=sum(d,k>>1);
		// d^(k/2)*(上一步累计的和)+上一步累计的和
		// 举例: 
		// d^2 * (d^1 + d^2) + (d^1 + d^2)
		//        d^3 + d^4  +  d^1 + d^2
		return expo(d,k>>1)*s+s;
	}
}
int main()
{
	int k;
	while(~scanf("%d%d%d",&n,&k,&mod)){
		mat a(n);
		for(int i=0;i


你可能感兴趣的:(数论)