问题描述
数列定义如下:
f(1) = 1, f(2) = 1, f(n) = (A * f(n - 1) + B * f(n - 2)) mod 7.
给定 A、B 和 n,您将计算 f(n) 的值。
f(1) = 1, f(2) = 1, f(n) = (A * f(n - 1) + B * f(n - 2)) mod 7.
给定 A、B 和 n,您将计算 f(n) 的值。
输入
输入由多个测试用例组成。每个测试用例在一行中包含 3 个整数 A、B 和 n(1 <= A、B <= 1000,1 <= n <= 100,000,000)。三个零表示输入结束,此测试用例不进行处理。
输出
对于每个测试用例,在一行上打印 f(n) 的值。
示例输入
1 1 3 1 2 10 0 0 0 示例输出 2 5
注:对7取模只有{0,1,2,3,4,5,6}这七种情况,所以f[n-1]f[n-2]有7*7 = 49种组合,将这49种组合情况算出后存在数组中,对n值对49取余数,得到的值对应的数组中的数值就是我们所要求得的f[n]值。
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while (sc.hasNext()) {
int a = sc.nextInt();
int b = sc.nextInt();
int n = sc.nextInt();
if (a == 0 && b == 0 && n == 0)
return;
if (n == 1 || n == 2)
System.out.println("1");
else {
int[] num = new int[50];
num[1] = 1;
num[2] = 1;
for (int i = 3; i < 50; i++) {
num[i] = (a * num[i - 1] + b * num[i - 2]) % 7;
}
System.out.println(num[n % 49]);
}
}
}
}