HDU1005

来源:互联网 发布:python 接收上传图片 编辑:程序博客网 时间:2024/06/06 01:52

本题题意就是求第n项 符合 f(n) = ( A*f(n-1)+B*f(n-2) )MOD7 的值是多少

这道题可以用规律求解 也可以用矩阵快速幂求解

以下是快速幂的求解方法:

#include<bits/stdc++.h>using namespace std;struct m{int a[2][2];}ori,res;int A,b,n,x,y;m mul(m x,m y){m t;memset(t.a,0,sizeof(t.a));for(int i=0;i<2;i++){for(int j=0;j<2;j++){for(int k=0;k<2;k++){t.a[i][j]+=x.a[i][k]*y.a[k][j];}t.a[i][j]%=7;}}return t;}int main(){while(scanf("%d%d%d",&A,&b,&n),A||b||n){res.a[0][1]=0,res.a[1][0]=0;res.a[0][0]=1,res.a[1][1]=1;ori.a[0][0]=A,ori.a[0][1]=b;ori.a[1][0]=1,ori.a[1][1]=0;if(n<=2)cout<<1<<endl;else{n-=2;while(n){if(n&1)res = mul(res,ori);ori = mul(ori,ori);n>>=1;}printf("%d\n",(res.a[0][0]+res.a[0][1])%7);}}return 0;}