1 #include <iostream> 2 using namespace std; 3 #define Max 100 4 int main() 5 { 6 unsigned int A,B,n,result,fn[Max]={0}; 7 int i=0; 8 unsigned int f1,f2; 9 cin>>A>>B>>n; 10 while(A||B||n) 11 { 12 f1=1; 13 f2=1; 14 fn[0]=(A*f1+B*f2)%7; 15 fn[1]=(A*fn[0]+B*f2)%7; 16 for(i=2;i<=n;i++) 17 { 18 fn[i]=(A*fn[i-1]+B*fn[i-2])%7; 19 if(fn[i-1]==fn[0]&&fn[i]==fn[1]) 20 { 21 result=fn[(n-3)%(i-1)];//求出周期 22 break; 23 } 24 } 25 if(n==1||n==2) 26 { 27 cout<<f1<<endl; 28 } 29 else 30 cout<<fn[(n-3)%(i-1)]<<endl; 31 cin>>A>>B>>n; 32 } 33 return 0; 34 }
心得:计算这种数列时,必须要对其周期进行计算,这样能够节省大量时间....
HDOJ 1005 Number Sequence,布布扣,bubuko.com
原文:http://www.cnblogs.com/kb342/p/3730208.html