#include <stdio.h> void matrix_mul(int (*a)[2],int (*b)[2]);//a = a * b void matrix_matrix(int n,int (*a)[2],int (*b)[2]); int main (){ int a,b,n,fn; int f[2][2],ans[2][2]; while (1){ scanf("%d%d%d",&a,&b,&n); if (a == 0 && b == 0 && n == 0 ) break; f[0][0] = a;f[0][1] = 1; f[1][0] = b;f[1][1] = 0; ans[0][0] = 1;ans[0][1] = 0; ans[1][0] = 0;ans[1][1] = 1; matrix_matrix(n - 2,ans,f); fn = (ans[0][0] + ans[1][0]) % 7 ; printf("%d\n",fn); } return 0; } void matrix_mul(int (*a)[2],int (*b)[2]){ int i[2][2]; i[0][0] = (a[0][0] * b[0][0] + a[0][1] * b[1][0]) % 7; i[0][1] = (a[0][0] * b[0][1] + a[0][1] * b[1][1]) % 7; i[1][0] = (a[1][0] * b[0][0] + a[1][1] * b[1][0]) % 7; i[1][1] = (a[1][0] * b[0][1] + a[1][1] * b[1][1]) % 7; a[0][0] = i[0][0];a[1][0] = i[1][0]; a[0][1] = i[0][1];a[1][1] = i[1][1]; //printf("%d %d\n%d %d\n\n",a[0][0],a[0][1],a[1][0],a[1][1]); } void matrix_matrix(int n,int (*ans)[2],int (*f)[2]){ while (n != 0){ if (n % 2 == 1) matrix_mul(ans,f); n = n / 2; matrix_mul(f,f); } }
Hoj 1005 利用矩阵计算线性递推式
最新推荐文章于 2019-10-24 11:04:01 发布