快速幂与矩阵快速幂
2016-09-01 22:33
351 查看
快速幂模板:
矩阵快速幂:(用于求递推公式题)
,递推求值
const int MOD = 10007; int qm(int a, int n)//a^n%MOD { int sum= 1; while(n) { if(n & 1) sum= sum* a % MOD; //n&1是n%2 a = a * a % MOD; n >>= 1; //n/=2; } return sum; }
矩阵快速幂:(用于求递推公式题)
/* 已知矩阵t,求t的n次方 */ #include<cstdio> using namespace std; const int mod=10000;/*求余*/ struct Matrix { int m[2][2]; /*下标从0开始*/ }; Matrix Mul(Matrix a,Matrix b)/*矩阵乘法*/ { Matrix c; memset(c.m,0,sizeof(c.m)); for(int i=0;i<2;i++) for(int j=0;j<2;j++) for(int k=0;k<2;k++) c.m[i][j]= (c.m[i][j]+a.m[i][k]*b.m[k][j] + mod)%mod; return c; } Matrix fastm(Matrix a,int n) /*矩阵a的n次方*/ { Matrix res;/*初始化为单位矩阵*/ memset(res.m,0,sizeof(res.m)); res.m[0][0] = res.m[1][1]=1; while(n) { if(n&1) res = Mul(res,a); n>>=1; a = Mul(a,a); } return res; } int main() { // freopen("input.txt","r",stdin); int n; while(~scanf("%d",&n)){ if(n==-1) break; Matrix t; t.m[0][0]=1;t.m[0][1]=1; t.m[1][0]=1;t.m[1][1]=0; printf("%d\n",fastm(t,n).m[1][0]); } return 0; }例题:fibonacci数列(二)
,递推求值
相关文章推荐
- luogu3390:矩阵快速幂(矩阵乘法+快速幂)
- 【算法】矩阵的快速幂以及利用快速幂去解题
- Luogu 3390 【模板】矩阵快速幂 (矩阵乘法,快速幂)
- 快速幂和矩阵快速幂-模板
- 快速幂和矩阵快速幂
- 快速幂和矩阵快速幂
- 快速幂(矩阵快速幂)
- 整数的快速幂和矩阵的快速幂
- 深夜敲模板_1——快速幂 && 矩阵的快速幂
- 快速幂(普通快速幂、矩阵快速幂)
- Poj 3150 Cellular Automaton(矩阵快速幂, 循环矩阵快速幂)
- 快速幂(矩阵快速幂)
- HDU - 5950 Recursive sequence 矩阵快速幂(由公式推矩阵快速幂简单讲解)
- 垒骰子(25 point(s))(矩阵快速幂+快速幂)
- 快速乘法&快速幂&矩阵快速幂简单讲解
- 快速求斐波那契数列(矩阵乘法+快速幂)
- 矩阵快速幂之整数快速幂
- POJ 3233 矩阵快速幂(做的快速幂的第一道题你敢信?
- 算法录 之 快速幂快速乘和矩阵快速幂。
- 普通快速幂与矩阵快速幂