zoukankan      html  css  js  c++  java
  • 数学:矩阵快速幂

    使用矩阵快速幂求斐波纳契数列

    看来矩阵运算是十分好封装的,在这里计算斐波纳契数列是用到了矩阵的乘法和以矩阵作为数据类型实现的快速幂

    看来矩阵甚至连结构体都不用写。。

     1 #include<cstdio>
     2 #include<vector>
     3 using std::vector;
     4 const int mod=10000;
     5 long long n;
     6 typedef vector<long long> vec;
     7 typedef vector<vec> mat;
     8 mat mul(mat &a,mat &b)
     9 {
    10     mat c(a.size(),vec(b[0].size()));
    11     for(int i=0;i<2;i++)
    12         for(int j=0;j<2;j++)
    13             for(int k=0;k<2;k++)
    14             {
    15                 c[i][j]+=a[i][k]*b[k][j];
    16                 c[i][j]%=mod;
    17             }
    18     return c;
    19 }
    20 mat pow(mat a,long long n)
    21 {
    22     mat res(a.size(),vec(a.size()));
    23     for(int i=0;i<a.size();i++) res[i][i]=1;
    24     while(n)
    25     {
    26         if(n&1) res=mul(res,a);
    27         a=mul(a,a);
    28         n/=2;
    29     }
    30     return res;
    31 }
    32 int main()
    33 {
    34     while(scanf("%lld",&n)==1&&n!=-1)
    35     {
    36         mat a(2,vec(2));
    37         a[0][0]=1;
    38         a[0][1]=1;
    39         a[1][0]=1;
    40         a[1][1]=0;
    41         a=pow(a,n);
    42         printf("%lld
    ",a[0][1]);
    43     }
    44     return 0;
    45 }
  • 相关阅读:
    索引
    convert 时间转换
    SQL中的case when then else end用法
    SVN安装图解
    dos 命令
    阿里云服务器相关知识
    mvc知识应用
    MVC分页
    mvc系统过滤器
    .net 接口
  • 原文地址:https://www.cnblogs.com/aininot260/p/9568492.html
Copyright © 2011-2022 走看看