Description
Jzzhu has invented a kind of sequences, they meet the following property:
You are given x and y, please calculate fn modulo 1000000007(109 + 7).
Input
The first line contains two integers x and y(|x|, |y| ≤ 109). The second line contains a single integer n(1 ≤ n ≤ 2·109).
Output
Output a single integer representing fn modulo 1000000007(109 + 7).
Sample Input
2 3 3
1
0 -1 2
1000000006
Hint
In the first sample, f2 = f1 + f3, 3 = 2 + f3, f3 = 1.
In the second sample, f2 = - 1; - 1 modulo (109 + 7) equals (109 + 6).
这道题在比赛的时候没有做出来 是因为刚开始一直在想着能不能用(a+b)%c=(a%c)%(b%c)的变形 没有往几个数一循环这方面想 这个题就是6个数一循环
注意::《负数对某个数取余》
代码:
#include<stdio.h>
#include<string.h>
#define INF 1000000007
int main()
{
long long n,m,s[10];
int i;
while(~scanf("%lld %lld",&n,&m))
{
s[1]=n;
s[2]=m;
for(i=3;i<=5;i++)
{
s[i]=s[i-1]-s[i-2];
}
s[0]=s[5]-s[4];///是s[0] 不是s[6].因为下面是取余
scanf("%lld",&n);
int k;
k=n%6;
if(s[k]>=0)
{
printf("%lld\n",s[k]%INF);
}
else
{
while(s[k]<0) ///负数
{
s[k]=s[k]+INF;
}
printf("%lld",s[k]%INF);
}
}
return 0;
}