题目地址:HDU 1005
此题的n最大为100000000,线性时间的话也会超时,所以肯定是有规律的。
a,b的值不确定,如何找规律呢?题目告诉我们a【1】a【2】等于一,正常思维来说,下一次连续出现两个一就出现循环节,此时跳出循环。
此时的i就是循环节大小,用n模除i-2,若是模除后为0,则n就是i-2的整数倍,就输出a【i-2】。
/*找规律的题目,第一个数跟第二个数都是1,当再次出现两数等于1时,出现循环节*/
/*找规律的题目,第一个数跟第二个数都是1,当再次出现两数等于1时,出现循环节*/
#include<iostream>
#include<cmath>
#include<algorithm>
#include<cstring>
using namespace std;
int main()
{
long long a,b,n,i,j,k;
int map[10000];
map[1]=1;map[2]=1;
while((cin>>a>>b>>n)&&(a&&b&&n))
{
for(i=3;i<10000;i++)
{
map[i]=(a*map[i-1]+b*map[i-2])%7;
if(map[i]==1&&map[i-1]==1)
break;
}
n=n%(i-2);
if(n==0)
n=i-2;
cout<<map[n]<<endl;
}
return 0;
}