hdu 2855 Fibonacci Check-up
2012-07-26 09:05
381 查看
矩阵乘法,好久没写过了,不过重要的还是找到规律。
http://acm.hdu.edu.cn/showproblem.php?pid=2855
View Code
http://acm.hdu.edu.cn/showproblem.php?pid=2855
View Code
# include<stdio.h> # include<string.h> # include<stdlib.h> int M; struct matrix{ int a[2][2]; }; matrix multi(matrix m1,matrix m2) { int i,j,k; matrix mm; for(i=0;i<2;i++) { for(j=0;j<2;j++) { mm.a[i][j]=0; for(k=0;k<2;k++) { mm.a[i][j]+=m1.a[i][k]*m2.a[k][j]; mm.a[i][j]%=M; } } } return mm; } matrix cal(matrix ma,int m) { int ans; matrix m1; m1.a[0][0]=1; m1.a[0][1]=0; m1.a[1][0]=0; m1.a[1][1]=1; while(m) { ans=m%2; if(ans) m1=multi(m1,ma); ma=multi(ma,ma); m/=2; } return m1; } int main() { int n,ncase,ans; scanf("%d",&ncase); matrix m1; while(ncase--) { scanf("%d%d",&n,&M); m1.a[0][0]=1; m1.a[0][1]=1; m1.a[1][0]=1; m1.a[1][1]=0; n*=2; if(n==0) {printf("0\n");continue;} if(n==2) {printf("%d\n",1%M);continue;} //(f ,f[n-1])=(f[2],f[1])*m1^(n-2) m1=cal(m1,n-2); ans=(m1.a[0][0]+m1.a[1][0])%M; printf("%d\n",ans); } return 0; }
相关文章推荐
- HDU 2855 Fibonacci Check-up 矩阵
- HDU 2855 Fibonacci Check-up 构造矩阵
- HDU 2855:Fibonacci Check-up_斐波拉契问题
- HDU2855 Fibonacci Check-up 矩阵的应用
- HDU - 2855 Fibonacci Check-up 矩阵快速幂
- hdu 2855 Fibonacci Check-up
- hdu 2855 Fibonacci Check-up (矩阵)
- 【HDU 2855】 Fibonacci Check-up (矩阵乘法)
- hdu-2855 Fibonacci Check-up
- HDU - 2855 Fibonacci Check-up 斐波那契矩阵
- hdu 2855 Fibonacci Check-up(矩阵乘法)
- hdu 2855 Fibonacci Check-up(犀利的推导公式)
- hdu 2855 Fibonacci Check-up【递推+矩阵快速幂】
- hdu 2855 Fibonacci Check-up 矩阵+斐波那契通项公式
- hdu 2855 Fibonacci Check-up
- HDU - 2855 Fibonacci Check-up
- Fibonacci Check-up (HDU 谢庆皇)
- HDOJ 题目2855 Fibonacci Check-up(矩阵快速幂)
- hdoj 2855 Fibonacci Check-up 【打表找规律 + 矩阵快速幂】
- 杭电2855 Fibonacci Check-up