矩阵乘法
直接上题吧,这东西百度就好了。
fib数列,矩阵快速幂的入门题
题目
输入输出什么的省掉了。
typedef long long ll;
const ll MOD = 1000000007;
struct Mat{
ll a[2][2];
}I;
void init(Mat& A){
A.a[0][0] = 0;
A.a[0][1] = A.a[1][0] = A.a[1][1] =1; //longlong还是好一点
}
Mat Mul(Mat A,Mat B,ll m){
Mat ans;
memset(ans.a,0,sizeof(ans.a));
for(int i = 0;i < 2;i++)
for(int j = 0;j < 2;j++)
for(int k = 0;k < 2;k++){
ans.a[i][j] += ((long long)A.a[i][k] * B.a[k][j])%m;
ans.a[i][j] %= m;
}
return ans;
}
Mat Pow(ll n,ll m)
{
Mat A;
if(n == 1) return I;
A = Pow(n/2,m);
A = Mul(A,A,m);
if(n&1) A= Mul(A,I,m);
return A;
}
ll fib(ll n,ll m){
Mat A;
A = Pow(n,m);
return A.a[0][1];
}
上面是线性递推数列的矩阵板子,下面是一些其他矩阵的灵活运用,我先列表再去刷吧。
生成树统计
日程表安排 这尼玛不就一个组合数学水题吗,我还以为很难
Xn数列

浙公网安备 33010602011771号