OJ_1081 递推数列

2019-04-14 17:10发布

#include using namespace std; const int N=10000; int matrix[2][2]; int middle[2][2]; void multiMatrix(int a[2][2], int b[2][2], int c[2][2]) { int i, j, d[2][2]; d[0][0] = (a[0][0] * b[0][0] + a[0][1] * b[1][0]) % N; d[0][1] = (a[0][0] * b[0][1] + a[0][1] * b[1][1]) % N; d[1][0] = (a[1][0] * b[0][0] + a[1][1] * b[1][0]) % N; d[1][1] = (a[1][0] * b[0][1] + a[1][1] * b[1][1]) % N; for (i = 0; i < 2; i ++) { for (j = 0; j < 2; j ++) { c[i][j] = d[i][j]; } } } void getresult(int n) { middle[0][0] = middle[1][1] = 1; middle[0][1] = middle[1][0] = 0; while (n) { if (n & 1) { multiMatrix(middle, matrix, middle); } multiMatrix(matrix, matrix, matrix); n >>= 1; } } void func() { int a0,a1,p,q,k; while(cin>>a0>>a1>>p>>q>>k) { if(k==0) cout<
矩阵乘法

题目描述:
给定a0,a1,以及an=p*a(n-1) + q*a(n-2)中的p,q。这里n >= 2。 求第k个数对10000的模。
输入:
输入包括5个整数:a0、a1、p、q、k。
输出:
第k个数a(k)对10000的模。
样例输入:
20 1 1 14 5
样例输出:
8359