奇怪的数列
Time Limit:1s Memory Limit:1000k
Total Submit:5542 Accepted:1189
Problem
f(1) = 1, f(2) = 1, f(n) = (A * f(n - 1) + B * f(n - 2)) mod 7. 给你A, B和n, 你要算出f(n)的值.
Input
每一组数据包含3个整数A, B 和 n 在同一行上 (1 <= A, B <= 1000, 1 <= n <= 100,000,000). 三个0在一行表示输入结束.
Output
对于每组数据,打印出f(n)的值.
Sample Input
1 1 3 0 0 0
Sample Output
2
C的解答和结果
#include <stdio.h>
int main()
{
int A, B, n;
int a, b, temp;
int table[100], pos, step;
while(scanf("%d%d%d", &A, &B, &n) > 0){
if(A == 0 && B == 0 && n == 0) break;
a = 1; b = 1;
table[0] = table[1] = 1;
pos = 2; step = -1;
while(1){
temp = (A * b + B * a) % 7;
a = b; b = temp;
table[pos] = b;
if(pos > 2){
if(table[0] == table[pos-1] && table[1] == table[pos]){
step = pos - 1;
break;
}
}
pos++;
}
printf("%d/n", table[(n-1) % step]);
}
return 0;
}
Memory: 32K
Time: 0ms