....

来源:互联网 发布:软件测试linux 编辑:程序博客网 时间:2024/06/07 05:41
C -
Time Limit:1000MS    Memory Limit:262144KB    64bit IO Format:%I64d & %I64u
SubmitStatusPracticeCodeForces 450B

Description

Jzzhu has invented a kind of sequences, they meet the following property:

You are given x and y, please calculate fn modulo1000000007(109 + 7).

Input

The first line contains two integers x andy(|x|, |y| ≤ 109). The second line contains a single integern(1 ≤ n ≤ 2·109).

Output

Output a single integer representing fn modulo1000000007(109 + 7).

Sample Input

Input
2 33
Output
1
Input
0 -12
Output
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;
}


0 0
原创粉丝点击