首页 > 代码库 > HDU - 1005 Number Sequence(简单矩阵快速幂)
HDU - 1005 Number Sequence(简单矩阵快速幂)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1005
题意:f(1) = 1, f(2) = 1, f(n) = (A * f(n - 1) + B * f(n - 2)) mod 7.
就是这道题目,然而找了一晚上的错误 \("▔□▔)/\("▔□▔)/\("▔□▔)/。
1 #include <iostream> 2 #include <cstring> 3 using namespace std; 4 5 struct matrix{ 6 int m[2][2]; 7 }ans,base; 8 9 matrix multi(matrix a,matrix b){10 matrix temp;11 memset(temp.m,0,sizeof(temp.m));12 for(int i=0;i<2;i++){13 for(int j=0;j<2;j++){14 for(int k=0;k<2;k++){15 temp.m[i][j]=(temp.m[i][j]+a.m[i][k]*b.m[k][j])%7;16 }17 }18 } 19 return temp;20 }21 22 int fast_mod(int a,int b,int n){23 base.m[0][0]=a;base.m[0][1]=b;base.m[1][0]=1;base.m[1][1]=0;24 ans.m[0][0]=ans.m[1][1]=1;25 ans.m[0][1]=ans.m[1][0]=0;26 while(n>0){27 if(n&1) ans=multi(ans,base);28 base=multi(base,base);29 n>>=1;30 }31 return (ans.m[0][0]+ans.m[0][1])%7;32 }33 34 int main(){35 int a,b,n;36 while(cin>>a>>b>>n){37 if(a==0&&b==0&&n==0) break;38 if(n==1||n==2) cout<<1<<endl;39 else cout<<fast_mod(a,b,n-2)<<endl;40 }41 return 0;42 }
HDU - 1005 Number Sequence(简单矩阵快速幂)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。