hdu1005 Number Sequence(斐波拉切)

Number Sequence

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 56345    Accepted Submission(s): 12756


Problem Description
A number sequence is defined as follows:

f(1) = 1, f(2) = 1, f(n) = (A * f(n - 1) + B * f(n - 2)) mod 7.

Given A, B, and n, you are to calculate the value of f(n).
 

 

Input
The input consists of multiple test cases. Each test case contains 3 integers A, B and n on a single line (1 <= A, B <= 1000, 1 <= n <= 100,000,000). Three zeros signal the end of input and this test case is not to be processed.
 

 

Output
For each test case, print the value of f(n) on a single line.
 

 

Sample Input
1 1 3
1 2 10
0 0 0
Sample Output
2
5
 
分析:这个题目和斐波拉切很像,因为斐波拉切模上一个数有周期,因此这个题可以从周期下手;
心得:以前我做斐波拉切时计算他的周期是 if(f[i]==f[1]&&f[i-1]==f[0]) T=i-1;使用这种方法必须满足纯周期(也就是说从第一项开始);
     可是这里周期是从第三项开始。
     所以我刚开始一直runtime error。
View Code
 1 #include<iostream>
 2 using namespace std;
 3 int f[100];
 4 int main()
 5 {
 6     int a,b,n,i,t;
 7     while(cin>>a>>b>>n&&(a||b||n))
 8     {
 9         t=n;
10         f[0]=(a+b)%7;f[1]=(a*f[0]+b)%7;//从第三项开始
11         for(i=2;i<n;i++)
12         {
13             f[i]=(a*f[i-1]+b*f[i-2])%7;
14             if(f[i-1]==f[0]&&f[i]==f[1])
15             {
16                 t=i-1;break;
17             }
18         }
19         if(n<=2) cout<<1<<endl;
20         else cout<<f[(n-3)%t]<<endl;
21     }
22     return 0;
23 }

 

posted @ 2012-05-03 13:53  mtry  阅读(790)  评论(0)    收藏  举报