这道题看起来很简单,打表,查数然后输出就行了,但是数据太大,肯定会TLE,所以就需要我们去寻找一些规律,来找到循环节,也就是说,看看这些answer中有没有循环出现的可能性
其实,对于这个表达式来说,A和B已经固定了,我们要做的就是对于n的范围的一个考察了,因为总的结果会mod7,所以有0 1 2 3 4 5 6 总共7种可能行,那么,就会有49(7*7)种可能性.那么最坏的话,就是在这50种运算中都跑了一遍,故最坏的情况就是一个长度为50的表了...
代码:
# include<cstdio>
# include<iostream>
using namespace std;
int f[100];
int main(void)
{
int n,A,B;
while ( cin>>A>>B>>n )
{
if ( A == 0&&B == 0&&n == 0 )
break;
f[1] = 1;
f[2] = 1;
if ( n==1||n==2 )
cout<<"1"<<endl;
else
{
for ( int i = 3;i <= 50;i++ )
{
f[i] = (A*f[i-1]+B*f[i-2])%7;
}
n = n%48;
cout<<f[n]<<endl;
}
}
return 0;
}