Number Sequence
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
1 #include <stdio.h> //N要满足条件的足够大,至于为什么是201要慢慢增大N的数值进行尝试 2 #define N 201 3 4 int main(){ 5 int A; 6 int B; 7 long n; 8 int i; 9 int f[N]; 10 int flag; 11 12 f[1]=1; 13 f[2]=1; 14 15 while(1){ 16 scanf("%d%d%ld",&A,&B,&n); 17 18 if(A==0 && B==0 && n==0) 19 break; 20 21 flag=0; 22 for(i=3;i<N;i++){ //两种情况,一种是以1 1开头进行循环的数列,另一种是1 1 0 0 0... 23 f[i]=(f[i-1]*A+f[i-2]*B)%7; 24 25 if(f[i]==1 && f[i-1]==1) 26 break; 27 28 if(f[i]==0 && f[i-1]==0){ 29 flag=1; 30 break; 31 } 32 } 33 34 if(flag==1){ 35 if(n==1 || n==2) 36 printf("1\n"); 37 38 else 39 printf("0\n"); 40 continue; 41 } 42 43 i-=2; //i为周期 44 n%=i; //n为周期内的某个数 45 46 if(n==0) //f[0]=f[i] 47 n=i; 48 49 50 printf("%d\n",f[n]); 51 } 52 53 return 0; 54 }