您的位置:首页 > 其它

【递归】普通递归关系 矩阵快速幂

2016-07-04 21:50 246 查看

问题 B: 【递归】普通递归关系

时间限制: 1 Sec 内存限制: 128 MB
提交: 12 解决: 12
[提交][状态][讨论版]

题目描述

考虑以下定义在非负整数n上的递归关系:

#include <bits/stdc++.h>
using namespace std;

typedef vector <int> vec;
typedef vector <vec> mat;
typedef long long ll;

const int M = 10000;

mat mul(mat &A, mat &B){

mat C(A.size(), vec(B[0].size()));
for (int i = 0; i < A.size(); i++){
for (int k = 0; k < B.size(); k++){
for (int j = 0; j < B[0].size(); j++){
C[i][j] = (C[i][j]+A[i][k]*B[k][j]) % M;
}
}
}
return C;
}

mat pow(mat A, ll n){

mat B(A.size(), vec(A.size()));
for (int i = 0; i < A.size(); i++){
B[i][i] = 1;
}
while (n > 0){

if (n & 1) B = mul(B, A);
A = mul(A, A);
n >>= 1;
}
return B;
}
ll  n,a,b,c,d;
void slove(){
mat A(2, vec(2));
A[0][0] = a; A[0][1] = b;
A[1][0] = c; A[1][1] = d;
A = pow(A, n);
printf("%d\n",A[1][0]);
}
int main() {
cin>>a>>b>>c>>d>>n;
slove();
return 0;
}


View Code
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: