#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
typedef long long int LL;
const LL mod=1000000007LL;
LL a,b,n;
int main()
{
cin>>a>>b>>n;
n--;
n=n%6;
LL ans=0;
switch(n)
{
case(0):
{
ans=(a+mod)%mod;
break;
}
case(1):
{
ans=(b+mod)%mod;
break;
}
case(2):
{
ans=(b-a+2*mod)%mod;
break;
}
case(3):
{
ans=(mod-a)%mod;
break;
}
case(4):
{
ans=(mod-b)%mod;
break;
}
case(5):
{
ans=(a-b+2*mod)%mod;
break;
}
}
cout<<ans<<endl;
return 0;
}
也可以利用矩阵的连乘~~~
#include<cstdio>
int main()
{
int a,b,n,i,k,rep;
while(scanf("%d%d%d",&a,&b,&n)!=EOF){
int matrix[2][2]={1,0,-1,1};
int ans[2][2]={1,0,0,1};
k=n-2;
if(a<0)a+=1000000007;
if(b<0)b+=1000000007;
for(;k;k>>=1){
if(k&1){
ans[0][0]=ans[0][0]*matrix[0][0]+ans[0][1]*matrix[1][0];//matrix's plus
ans[0][1]=ans[0][0]*matrix[0][1]+ans[0][1]*matrix[1][1];
ans[1][0]=ans[1][0]*matrix[0][0]+ans[1][1]*matrix[1][0];
ans[1][1]=ans[1][0]*matrix[0][1]+ans[1][1]*matrix[1][1];
//ans=Mplus(ans,matrix);
}
matrix[0][0]=matrix[0][0]*matrix[0][0]+matrix[0][1]*matrix[1][0];//so do it
matrix[0][1]=matrix[0][0]*matrix[0][1]+matrix[0][1]*matrix[1][1];
matrix[1][0]=matrix[1][0]*matrix[0][0]+matrix[1][1]*matrix[1][0];
matrix[1][1]=matrix[1][0]*matrix[0][1]+matrix[1][1]*matrix[1][1];
// matrix=Mplus(matrix,matrix);
}
rep=ans[1][0]*a+ans[1][1]*b;
for(;rep<=0;rep+=1000000007);
rep%=1000000007;
printf("%d\n",rep);
}
return 0;
}