time limit per test
1 second
memory limit per test
256 megabytes
input
standard input
output
standard outputJzzhu 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 test(s)
input
2 3 3
output
1
input
0 -1 2
output
1000000006
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <vector>
#include<cmath>
using namespace std;
typedef long long int LL;
const int mod=1e9+7;
LL f1,f2,f;
int main()
{
LL x,y,i;
while(scanf("%lld%lld",&x,&y)!=EOF)
{
LL n;
scanf("%lld",&n);
f1=x;
f2=y;
n=n%6;
if(n==1)
{
cout<<(x+mod)%mod<<endl;
continue;
}
else if(n==2)
{
cout<<(y+mod)%mod<<endl;
continue;
}
if(n==0)
n=6;
for(i=2;i<n;i++)
{
f=(f2-f1+mod)%mod;
f1=f2;
f2=f;
}
printf("%lld\n",(f+mod)%mod);
}
return 0;
}
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <vector>
#include<cmath>
using namespace std;
typedef long long int LL;
const int mod=1e9+7;
LL f1,f2,f;
int main()
{
LL x,y,i;
while(scanf("%lld%lld",&x,&y)!=EOF)
{
LL n;
scanf("%lld",&n);
f1=x;
f2=y;
n=n%6;
if(n==1)
{
cout<<(x+mod)%mod<<endl;
continue;
}
else if(n==2)
{
cout<<(y+mod)%mod<<endl;
continue;
}
if(n==0)
n=6;
for(i=2;i<n;i++)
{
f=(f2-f1+mod)%mod;
f1=f2;
f2=f;
}
printf("%lld\n",(f+mod)%mod);
}
return 0;
}
本文介绍了一个特殊的数列计算方法,给定 x 和 y 计算数列第 n 项 fn 的值,数值结果取模 10^9 + 7。通过分析数列周期性,实现快速计算。
2877

被折叠的 条评论
为什么被折叠?



