hdu 1005Number Sequence (矩阵快速幂)
2013-06-01 10:53
393 查看
F(n) a b F(n-1)
= *
F(n-1 ) 1 0 F(n-2)
矩阵快速幂 (跟着大师学矩阵快速幂 )
= *
F(n-1 ) 1 0 F(n-2)
矩阵快速幂 (跟着大师学矩阵快速幂 )
#include<stdio.h> #include<string.h> #include<algorithm> using namespace std; struct Matrix { int m[2][2]; }E,A; void init() { for(int i=0;i<2;i++) for(int j=0;j<2;j++) E.m[i][j]=(i==j); } Matrix Mut(Matrix A,Matrix B,int mod) { Matrix ans; int i,j,k; for(i=0;i<2;i++) for(j=0;j<2;j++) { ans.m[i][j]=0; for(k=0;k<2;k++) ans.m[i][j]=(ans.m[i][j]+(A.m[i][k]%mod)*(B.m[k][j]%mod))%mod; } return ans; } Matrix quick(Matrix A,int n,int mod) { Matrix t=A,d=E; while(n) { if(n%2) d=Mut(d,t,mod); n/=2; t=Mut(t,t,mod); } return d; } int main() { init(); int a,b,n; while(scanf("%d%d%d",&a,&b,&n)!=EOF) { if(a==0&&b==0&&n==0) break; if(n==1||n==2) { printf("1\n"); } else { A.m[0][0]=a; A.m[0][1]=b; A.m[1][0]=1; A.m[1][1]=0; Matrix ans=quick(A,n-2,7); printf("%d\n",(ans.m[0][0]+ans.m[0][1])%7); } } return 0; }
相关文章推荐
- HDU 4965 Fast Matrix Calculation 矩阵快速幂
- HDU 5015 233 Matrix(矩阵快速幂)
- HDU 1757-A Simple Math Problem(矩阵快速幂)
- hdu 1005 Number Sequence(矩阵快速幂,找规律,模版更通用)
- hdu 5564 Clarke and digits (数位dp + 矩阵快速幂优化)
- HDU 2842 Chinese Rings ( 矩阵转换,矩阵快速幂求解)
- HDU 1757 A Simple Math Problem(矩阵快速幂)
- hdu 5015 233 Matrix(矩阵快速幂)
- HDU~5015 233 Matrix(矩阵快速幂)
- 2017多校联合第二场 1006题 hdu 6050 Funny Function 递推公式 / 矩阵快速幂
- hdu 2157(矩阵快速幂)
- hdu 2276 矩阵快速幂&&循环矩阵优化
- hdu 4291 矩阵快速幂+循环节
- hdu 1575 矩阵快速幂
- hdu 5015(矩阵快速幂z )
- hdu 2157 How many ways?? (矩阵快速幂)
- hdu 2855 矩阵快速幂
- HDU - 2604 Queuing (矩阵快速幂)
- HDU 4565 So Easy! 矩阵快速幂 + 共轭数
- HDU 4291 A Short problem(矩阵快速幂+循环节)