首页 > 代码库 > poj 3070 矩阵快速幂简单题
poj 3070 矩阵快速幂简单题
基本运用,基本是模板题。
求fi【n】. (1,1) *( 1 )
( 1,0) ( 0)
#include<iostream> #include<cstring> using namespace std; struct juz { int bat[3][3]; int x,y; //行 列 }; juz mutp(juz a,juz b) { juz c; c.x=a.x;c.y=b.y; memset(c.bat,0,sizeof(c.bat)); for(int k=0;k<a.y;k++) for(int i=0;i<a.x;i++) if(a.bat[i][k]) { for(int j=0;j<b.y;j++) { c.bat[i][j]+=(a.bat[i][k]*b.bat[k][j])%10000; } } return c; } juz quickf(juz a,int k) { juz c=a; for(int i=0;i<a.x;i++) for(int j=0;j<a.x;j++) c.bat[i][j]=(i==j); while(k>=1) { if(k%2) c=mutp(c,a); k=k/2; a=mutp(a,a); } return c; } int main() { int n; while(cin>>n&&n!=-1) { if(n==0) { cout<<0<<endl;continue; } juz a,b,c; a.x=2;a.y=2; b.x=2;b.y=1; a.bat[0][0]=1;a.bat[0][1]=1;a.bat[1][0]=1;a.bat[1][1]=0; b.bat[0][0]=1;b.bat[1][0]=0; c=quickf(a,n-1); c=mutp(c,b); cout<<c.bat[0][0]<<endl; } return 0; }
poj 3070 矩阵快速幂简单题
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。