#include <cstdio>
#include <cstring>
using namespace std;
const int maxs = 2;
const int mod = 1e9+7;
struct Matrix
{
int a[maxs][maxs];
Matrix() {memset(a, 0, sizeof(a));}
void init()//初始化为单位矩阵
{
for(int i=0; i<maxs; ++i)
a[i][i] = 1;
}
};
int x, y;
int n;
Matrix mul(Matrix A, Matrix B)
{
Matrix ret;
for(int i = 0; i < maxs; ++i)
for(int j = 0; j < maxs; ++j)
for(int k = 0; k < maxs; ++k)
{
ret.a[i][j] += A.a[i][k]*B.a[k][j];
ret.a[i][j] %= mod;
}
return ret;
}
Matrix qpow(Matrix A, int n)
{
Matrix ret;
ret.init();
while(n)
{
if(n&1) ret = mul(ret, A);
A = mul(A, A);
n>>=1;
}
return ret;
}
int main()
{
while(~scanf("%d %d", &x, &y))
{
scanf("%d", &n);
Matrix A;
A.a[0][0] = 1;
A.a[0][1] = -1;
A.a[1][0] = 1;
A.a[1][1] = 0;
A = qpow(A, n-1);
int ans = A.a[1][0]*y + A.a[1][1]*x;
ans %= mod;
ans += mod;
ans %= mod;
printf("%d\n", ans);
}
return 0;
}
CodeForces - 450B 矩阵快速幂
最新推荐文章于 2021-09-11 19:55:36 发布