hdu 1005

#include<iostream>
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int f[10001];
int main()
{
    int a,b,n;
    f[2]=f[1]=1;
    while(~scanf("%d %d %d",&a,&b,&n)&&(a||b||n))
    {
      for(int i=3;i<=49;i++)
              f[i]=(a*f[i-1]+b*f[i-2])%7;
      f[0]=f[49];
      n=n%49;
      printf("%d\n",f[n]);
    }
    return 0;
}
/*本题需要仔细观察,发现规律,因为f[i]是对7取余,所以
只可能有0,1,2,3,4,5,6七种取值, f[i]=(a*f[i-1]+b*f[i-2])%7;
中f[i-1]和f[i-2]均只有七种取值,所以总共最多出现49种
取值情况,49为最大循环节,意味着1,1这两个连续的数最多
在50,51,取得*/
posted @ 2015-10-28 20:42  快点说我帅  阅读(91)  评论(0)    收藏  举报