码迷,mamicode.com
首页 > 其他好文 > 详细

矩阵快速幂

时间:2018-07-18 14:03:41      阅读:204      评论:0      收藏:0      [点我收藏+]

标签:tar   targe   sizeof   pac   ons   main   http   put   题目   

//矩阵快速幂,本题二阶矩阵
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<iostream>
#include<algorithm>
using namespace std;

const int mod = 1e9+7;
struct Matrix
{
  long long mat[2][2];
  Matrix()
  {
    memset(mat,0,sizeof(mat));
  }
  Matrix operator * (const Matrix &b)
  {
    Matrix res;
    for (int i=0; i<2; ++i)
    {
      for (int j=0; j<2; ++j)
      {
        for (int k=0; k<2; ++k)
        {
          res.mat[i][j]+=mat[i][k]*b.mat[k][j];
          res.mat[i][j]%=mod;
        }
      }
    }
    return res;
  }

};

Matrix operator ^ (Matrix a,long long n)
{
  Matrix res;
  for (int i=0; i<2; ++i)
    res.mat[i][i]=1;
  while(n)
  {
    if(n&1)
      res=res*a;
    a=a*a;
  n>>=1;
  }
  return res;
}
int main()
{
  long long n, m;
  Matrix a, s;

  //推导的矩阵内容
  a.mat[0][0] = 3;
  a.mat[0][1] = 1;
  a.mat[1][0] = 1;
  a.mat[1][1] = 3;

  scanf("%I64d", &n);
  if(n == 0)
  {
    puts("1");
    return 0;
  }
  s = a^(n-1);//矩阵快速幂的应用
  m = (s.mat[0][0]*3+s.mat[0][1]*1)%mod;//最后的结果式子
  printf("%I64d\n",m);

}

题目链接

http://120.78.128.11/Problem.jsp?pid=3347

矩阵快速幂

标签:tar   targe   sizeof   pac   ons   main   http   put   题目   

原文地址:https://www.cnblogs.com/1998LJY/p/9328156.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!