#include<iostream> #include<algorithm> #include<string> #include<cstring> #include<cmath> #include<stack> #include<vector> #include<map> #include<set> #include<queue> #include<utility> #define ll long long
usingnamespacestd ;
const ll MOD = 1e9+7 ; constint maxn = 2 ;
struct { int m[maxn][maxn] ; }mat ;
matrix operator *(matrix a , matrix b){ matrix res ; for ( int i = 0 ; i < maxn ; i ++ ){ for ( int j = 0 ; j < maxn ; j ++ ){ ll temp = 0 ; for ( int k = 0 ; k < maxn ; k ++ ){ temp += (a.m[i][k] % MOD * b.m[k][j] % MOD) % MOD ; } res.m[i][j] = temp % MOD ; } } return res ; }
voidinit(){ for ( int i = 0 ; i < maxn ; i ++ ){ mat.m[i][i] = 1 ; } return ; }
matrix quick_pow(matrix a, ll n){ matrix ans = mat ; while (n){ if (n & 1){ ans = ans * a ; } a = a * a ; n >>= 1 ; } return ans ; }
intmain(){ ll x , y , n ; while ( cin >> x >> y >> n ){ if ( n == 1 ){ cout << (x % MOD + MOD) % MOD << endl ; }elseif ( n == 2 ){ cout << (y % MOD + MOD) % MOD << endl ; }else{ init() ; matrix temp ; temp.m[0][0] = 1 , temp.m[0][1] = 1 ; temp.m[1][0] = -1 , temp.m[1][1] = 0 ; temp = quick_pow(temp , n - 2) ; matrix ans ; ans.m[0][0] = y , ans.m[0][1] = x ; ans = ans * temp ; cout << (ans.m[0][0] % MOD + MOD) % MOD << endl ; } } return0 ; }
近期评论