循环节 HDU1005
1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 5 using namespace std; 6 7 int arr[10000]; 8 9 int main() 10 { 11 int a,b,n,s,e; 12 while(scanf("%d%d%d",&a,&b,&n)!=EOF) 13 { 14 if(a==0&&b==0&&n==0) 15 break; 16 memset(arr,0,sizeof(arr)); 17 arr[1]=arr[2]=1; 18 int flag=1; 19 for(int i=3;i<=n&&flag;i++) 20 { 21 arr[i]=(arr[i-1]*a+arr[i-2]*b)%7; 22 for(int j=2;j<i;j++) 23 { 24 if(arr[j]==arr[i]&&arr[j-1]==arr[i-1]) 25 { 26 s=j; 27 e=i; 28 flag=0; 29 break; 30 } 31 } 32 } 33 if(!flag) 34 { 35 int se=(n-s)%(e-s); 36 cout<<arr[se+s]<<endl; 37 } 38 else 39 { 40 cout<<arr[n]<<endl; 41 } 42 } 43 return 0; 44 }