HDU 4549 M斐波那契数列(矩阵快速幂)

#include<cstdio>#include<cstring>#include<algorithm>#include<vector>#include<string>#include<iostream>#include<queue>#include<cmath>#include<map>#include<stack>#include<bitset>using namespace std;#define REPF( i , a , b ) for ( int i = a ; i <= b ; ++ i )#define REP( i , n ) for ( int i = 0 ; i < n ; ++ i )#define CLEAR( a , x ) memset ( a , x , sizeof a )typedef long long LL;typedef pair<int,int>pil;const int INF = 0x3f3f3f3f;const int MOD=1e9+6;LL a,b,n;struct Matrix{LL mat[2][2];void Clear(){CLEAR(mat,0);}};Matrix mult(Matrix m1,Matrix m2){Matrix ans;for(int i=0;i<2;i++)for(int j=0;j<2;j++){ans.mat[i][j]=0;for(int k=0;k<2;k++)ans.mat[i][j]=(ans.mat[i][j]+m1.mat[i][k]*m2.mat[k][j])%MOD;}return ans;}Matrix Pow(Matrix m1,LL b){Matrix ans;ans.Clear();for(int i=0;i<2;i++)ans.mat[i][i]=1;while(b){if(b&1)ans=mult(ans,m1);b>>=1;m1=mult(m1,m1);}return ans;}LL quick_mod(LL a,LL b){LL ans=1;while(b){if(b&1)ans=ans*a%1000000007;b>>=1;a=a*a%1000000007;}return ans;}int main(){while(~scanf("%lld%lld%lld",&a,&b,&n)){Matrix A;if(n<=1){printf("%lld\n",n==0?a:b);continue;}A.mat[0][0]=A.mat[0][1]=1;A.mat[1][0]=1;A.mat[1][1]=0;A=Pow(A,n-1);LL m,k;m=(A.mat[0][0])%MOD;k=(A.mat[0][1])%MOD;LL ans=1;ans=ans*quick_mod(a,k)%1000000007;ans=ans*quick_mod(b,m)%1000000007;printf("%lld\n",ans);}return 0;}

,人格的完善是本,财富的确立是末。

HDU 4549 M斐波那契数列(矩阵快速幂)

相关文章:

你感兴趣的文章:

标签云: