#include <iostream>
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%N<<endl;
else if(k==1)
cout<<a1%N<<endl;
else
{
matrix[0][0] = p; matrix[0][1] = q;
matrix[1][0] = 1;matrix[1][1] = 0;
getresult(k-1);
int result=(middle[0][0] * a1 + middle[0][1] * a0) % N;
cout<<result<<endl;
}
}
}
int main(int argc, char *argv[])
{
//printf("Hello, world\n");
func();
return 0;
}
矩阵乘法
-
题目描述:
-
给定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