#include<stdio.h>
# define N 49
/*f(n) = (A * f(n - 1) + B * f(n - 2)) mod 7. 假设 A * f(n - 1)= x B * f(n - 2)=y,f(n)= z
z= (x+y)%7, x %7=7种可能 y %7=7种 所以z一共49种可能
输入由多个测试用例组成。
每个测试用例在一行包含3个整数(1 %3C= A,B %3C= 1000,1 %3C= n %3C= 100,000,000)。
三个零表示输入结束,这个测试用例不被处理。*/
int a[N] = {1,1};
int main() {
int A, B, n,i = 0;
scanf("%d%d%d",&A,&B,&n);
while (A || B || n) {
if (n > 0 && n < 3) //如果n取1 2输出 a[n-1]
printf("%d",a[n - 1]);
for (i = 2; i < 49; i++){
a[i] = (A * a[i - 1] + B * a[i - 2])%7;
if (i == n-1)
break; //计算周期49次前的
}
if (i == n-1) {
printf("%d",a[i]);
}
else {
printf("%d",a[(n % 49) - 1]);
}
scanf("%d%d%d",&A,&B,&n); //*重点
}
return 0;
}
数列递归应用(*)
最新推荐文章于 2024-04-25 17:04:59 发布