題目鏈接:http://acm.hdu.edu.cn/showproblem.php?pid=1005
數學問題,在集合f中f(1)=1,f(2)=1,給定A、B和n,求f(n) = (A * f(n - 1) + B * f(n - 2)) mod 7。
這個題可以先打表,隨意給定A、B、n的值,會發現f的值存在循環節,而每次都mod7,所以f(n-1)和f(n-2)都有0—6七種狀態,一共49種狀態,只要找到循環節即可,而循環節的是以兩個1開始的。
#include<cstdio>
#include<iostream>
using namespace std;
int f[105];
int main()
{
int a,b,n;
while(cin>>a>>b>>n)
{
if(a==0&&b==0&&n==0) break;
f[0]=1,f[1]=1,f[2]=1;
int t;
int flag=0;
for(int i=3;i<=50;i++)
{
f[i]=(a*f[i-1]+b*f[i-2])%7;
if(f[i]==1&&f[i-1]==1)
{
t=i;
break;
}
}
n=n%(t-2);
if(n==0) cout<<f[t-2]<<endl;
else cout<<f[n]<<endl;
}
}