http://acm.hdu.edu.cn/showproblem.php?pid=1005
题目标题:number sequence
题目大意:求
f(1) = 1, f(2) = 1, f(n) = (A * f(n - 1) + B * f(n - 2)) mod 7.
看到这个题,第一个想法就是直接照着求,但是n的范围很大,直接求会爆,然后我们就看这个式子可不可以化简,两个数乘函数值再mod7,那么每49个数字就会成为一个循环,于是只要求前49个数的值就行了,代码很简单。
#include<iostream>
using namespace std;
int re[50];
int main()
{
int a,b,n;
while(cin>>a>>b>>n)
{
if(a==0&&b==0&&n==0) break;
re[1]=1;
re[2]=1;
for(int i=3;i<=49;i++)
re[i]=(a*re[i-1]+b*re[i-2])%7;
n=n%49;
if(n==0) n=49;
cout<<re[n]<<endl;
}
return 0;
}