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).
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。

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 }