#include<iostream>
#include<string.h>
using namespace std;
const int mod=7;
typedef struct node{
long long a[2][2];
void init(){ //初始化單位矩陣
memset(a,0,sizeof(a));
for(int i=0;i<2;i++)
a[i][i]=1;
}
}matrix;
matrix mul(matrix a,matrix b){
matrix ans;
for(int i=0;i<2;i++)
for(int j=0;j<2;j++){
ans.a[i][j]=0;
for(int k=0;k<2;k++)
ans.a[i][j]+=(a.a[i][k]*b.a[k][j])%mod;
ans.a[i][j]=(ans.a[i][j]+mod)%mod;
}
return ans;
}
matrix add(matrix a,matrix b){ //矩陣加法
matrix ans;
for(int i=0;i<2;i++)
for(int j=0;j<2;j++)
ans.a[i][j]=(a.a[i][j]+b.a[i][j])%mod;
return ans;
}
matrix pow(matrix a,int n){ //a的n次方
matrix ans;
ans.init(); //調用函數初始化
while(n){
if(1&n) ans=mul(ans,a);
n/=2;
a=mul(a,a);
}
return ans;
}
int main(){
int a,b,n;
matrix s,ans; //
cin>>a>>b>>n;
s.a[0][0]=0;s.a[0][1]=1;
s.a[1][0]=b;s.a[1][1]=a;
ans.a[0][0]=1;ans.a[0][1]=0;
ans.a[1][0]=1;ans.a[1][1]=0;
ans=mul(pow(s,n-1),ans);
cout<<ans.a[0][0]<<endl;
return 0;
}
51nod 1126 求遞推序列的第N項【矩陣快速冪】
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.