POJ 3233 Matrix Power Series 矩阵快速幂
设S[k] = A + A^2 +````+A^k.
设矩阵T =
| A[1] | 0 |
| E | E |
这里的E为n*n单位方阵,0为n*n方阵
令A[k] = A ^ k
矩阵B[k] =
| A[k+1] |
| S[k] |
则有递推式B[K] = T*B[k-1],即有B[k] = T^k*B[0],令S[0] 为n*n的0矩阵。
矩阵快速幂求出即可·····
还可以使用两次分治的方法····自行百度····
贴代码:
#include<cstdio>
#include<cstring>
int n,k,p,d;//d = 2*n
struct matrix
{
int m[][];
} A;
matrix mul(int a[][],int b[][])
{
matrix ans;
memset(ans.m,,sizeof(ans.m));
for(int i=; i<=d; ++i)
for(int j=; j<=d; ++j)
for(int k=; k<=d; ++k)
ans.m[i][j] = (ans.m[i][j] + a[i][k]*b[k][j]%p)%p;
return ans;
}
matrix qPow()
{
matrix ans;
memset(ans.m,,sizeof(ans.m));
for(int i=; i<=d; ++i)
ans.m[i][i] = ;
while(k)
{
if(k&) ans = mul(ans.m,A.m);
A = mul(A.m,A.m);
k >>= ;
}
return ans;
}
int main()
{
// freopen("in.txt","r",stdin);
while(~scanf("%d%d%d",&n,&k,&p))
{
memset(A.m,,sizeof(A.m));
int t[][];
for(int i=; i<=n; ++i)
{
for(int j=; j<=n; ++j)
{
scanf("%d",&A.m[i][j]);
t[i][j] = A.m[i][j];
}
}
for(int i=n+; i<=*n; ++i)
A.m[i][i-n] = ,A.m[i][i] = ;
d = n<<;
matrix ans = qPow();
for(int i=n+; i<=d; ++i)
{
for(int j=; j<=n; ++j)
{
int res =;
for(int k=; k<=n; ++k)
res = (res + ans.m[i][k]*t[k][j]%p)%p;
if(j != ) printf(" ");
printf("%d",res);
}
puts("");
}
}
return ;
}
POJ 3233 Matrix Power Series 矩阵快速幂的更多相关文章
- POJ 3233 Matrix Power Series 矩阵快速幂+二分求和
矩阵快速幂,请参照模板 http://www.cnblogs.com/pach/p/5978475.html 直接sum=A+A2+A3...+Ak这样累加肯定会超时,但是 sum=A+A2+...+ ...
- POJ 3233:Matrix Power Series 矩阵快速幂 乘积
Matrix Power Series Time Limit: 3000MS Memory Limit: 131072K Total Submissions: 18450 Accepted: ...
- poj 3233 Matrix Power Series(矩阵二分,高速幂)
Matrix Power Series Time Limit: 3000MS Memory Limit: 131072K Total Submissions: 15739 Accepted: ...
- POJ3233:Matrix Power Series(矩阵快速幂+二分)
http://poj.org/problem?id=3233 题目大意:给定矩阵A,求A + A^2 + A^3 + … + A^k的结果(两个矩阵相加就是对应位置分别相加).输出的数据mod m.k ...
- poj 3233 Matrix Power Series 矩阵求和
http://poj.org/problem?id=3233 题解 矩阵快速幂+二分等比数列求和 AC代码 #include <stdio.h> #include <math.h&g ...
- POJ3233 Matrix Power Series 矩阵快速幂 矩阵中的矩阵
Matrix Power Series Time Limit: 3000MS Memory Limit: 131072K Total Submissions: 27277 Accepted: ...
- Poj 3233 Matrix Power Series(矩阵乘法)
Matrix Power Series Time Limit: 3000MS Memory Limit: 131072K Description Given a n × n matrix A and ...
- POJ 3233 Matrix Power Series(矩阵高速功率+二分法)
职务地址:POJ 3233 题目大意:给定矩阵A,求A + A^2 + A^3 + - + A^k的结果(两个矩阵相加就是相应位置分别相加).输出的数据mod m. k<=10^9. 这 ...
- POJ3233:Matrix Power Series(矩阵快速幂+递推式)
传送门 题意 给出n,m,k,求 \[\sum_{i=1}^kA^i\] A是矩阵 分析 我们首先会想到等比公式,然后得到这样一个式子: \[\frac{A^{k+1}-E}{A-E}\] 发现要用矩 ...
随机推荐
- visualsvn server 安装提示无法启动
需要在服务里面给visualsvn server 用本地账户登陆权限
- java jar
http://www.cnblogs.com/shirui/p/5270969.html Java之 将程序打包成jar包 准备材料: 1.java文件: Helloworld.java pack ...
- Hibernate 错误处理
1. 在处理映射 1 对 n 时,Customer类为 1, Order类为 n,对象关系映射文件中没有错误,<many to one> 也正确,表名通类名. 但是,在执行插入时,发生两个 ...
- iOS:图片拉伸不变形技巧
方法: 假设图片为60*24 CGFloat top = image.height*0.5-1; // 顶端盖高度 CGFloat bottom = top ; // 底端盖高度 CGFloat le ...
- pig
1.Pig是基于hadoop的一个数据处理的框架. MapReduce是使用java进行开发的,Pig有一套自己的数据处理语言,Pig的数据处理过程要转化为MR来运行.2.Pig的数据处理语言是数据流 ...
- 百度Paddle会和Python一样,成为最流行的深度学习引擎吗?
PaddlePaddle会和Python一样流行吗? 深度学习引擎最近经历了开源热.2013年Caffe开源,很快成为了深度学习在图像处理中的主要框架,但那时候的开源框架还不多.随着越来越多的开发者开 ...
- SharePoint 2016 的新特性概览(一)(What's New for IT Professionals in SharePoint Server 2016)
博客地址:http://blog.csdn.net/FoxDave 今天看霖雨大神的转的微软最新的关于SharePoint 2016的Update,正好看到了SP2016新发布的视频,整理一下发出 ...
- SharePoint 2013 Nintex Workflow 工作流帮助(十一)
博客地址 http://blog.csdn.net/foxdave 工作流动作 27. Create item in another site(Libraries and lists分组) 该操作用于 ...
- Event Handling on Mac
Keyboard/Mouse Event + Cocoa AppleEvent + Cocoa AppleEvent + CommandLine App(w/o UI) + CoreFoundatio ...
- Java中接口作为方法的返回
在<算法>中的散列表一节,在用拉链法实现散列表的API时要求实现以下一个方法: public Iterable<Key> keys() 我们知道Iterable是一个接口,那么 ...