Sample Input
1 1 3
1 2 10
0 0 0
Sample Output
2
5
#include<iostream>
using namespace std;
#define int long long
const int mod = 7;
struct Matrix{
static const int n = 3;//静态变量n,比给定的矩阵大1就可以
int temp[n][n];//临时数组,存放结果
Matrix(int e = 0){//构造函数初始化作用
for(int i=1;i<=n-1;i++){
for(int j=1;j<=n-1;j++){
temp[i][j]=(i==j)*e;
//i=j结果只能是1,行和列相等
//等于1 的话乘e就好
}
}
}
//矩阵乘法
Matrix mul(Matrix A,Matrix B){
Matrix ans(0);
for(int i=1;i<=n-1;i++){
for(int j=1;j<=n-1;j++){
for(int k=1;k<=n-1;k++){
ans.temp[i][j]=(ans.temp[i][j]%mod+((A.temp[i][k]%mod)*(B.temp[k][j]%mod)%mod))%mod;
}
}
}
return ans;
// A[1][2]*B[2][1]
// k
}
Matrix qpow(Matrix A,int b){
Matrix res(1);
while(b){
if(b&1)
res=res.mul(res,A);
b>>=1;
A=A.mul(A,A);
}
return res;
}
};
signed main(){
ios::sync_with_stdio(0);
cin.tie(0);
int a,b,nn;
while(cin>>a>>b>>nn){
if(a==b&&b==nn&&a==0)
break;
if(nn<=2){
cout<<1<<endl;
continue;
}
Matrix A(0);
A.temp[1][1]=a;
A.temp[1][2]=b;
A.temp[2][1]=1;//构造固定矩阵
A=A.qpow(A,nn-2);//求A 的n-2次幂,结果放到A中
//利用A^(n-2) 求结果f(n)
int ans = 0;
int dat[3]={0,1,1};
for(int i=1;i<=2;i++){
ans = (ans%mod+((A.temp[1][i]%mod*dat[i]%mod)%mod)%mod)%mod;
}
cout<<ans<<endl;
}
return 0;
}