zoukankan      html  css  js  c++  java
  • 【模板】【矩阵快速幂】求第n项斐波那契

    注意a数组初始化,调用Pow(a,n,w),n是第几项,求斐波那契中w默认为2

    ll tmp[2][2],res[2][2];
    void multi(ll a[][2],ll b[][2],int n)
    {
        memset(tmp,0,sizeof(tmp));
        for(ll i=0;i<n;i++)
        {
           for(ll j=0;j<n;j++)
           {
            for(ll k=0;k<n;k++)
            {
            tmp[i][j]+=(a[i][k]*b[k][j])%p;
            }
            tmp[i][j]=tmp[i][j]%p;
          }
       }
        for(ll i=0;i<n;i++)
            for(ll j=0;j<n;j++)
            a[i][j]=tmp[i][j];
    }
    void Pow(ll a[][2],ll m,int n)
    {
        memset(res,0,sizeof(res));//m是幂,n是矩阵大小
        for(ll i=0;i<n;i++) res[i][i]=1;
        while(m)
        {
            if(m&1)
            multi(res,a,n);//res=res*a;复制直接在multi里面实现了;
            multi(a,a,n);//a=a*a
            m>>=1;
        }
    }
    ll qm(ll a,ll b)
    {
        ll ret=1;
        while(b)
        {
            if(b&1)
            {
                ret=ret*a%p;
            }
            a=a*a%p;
            b>>=1;
        }
        return ret;
    }
    //Pow(a,n,2) 调用  初始化:a[0][0]=a[0][1]=a[1][0]=1,a[1][1]=0
    
  • 相关阅读:
    [BZOJ] IOI2015 Boxes纪念品盒
    [BZOJ] 聚会
    [BZOJ] 地精部落
    [BZOJ] 最长距离
    正则
    cookie实例 记住用户名密码
    cookie封装
    碎片整合 例子
    闭包 tab切换 实例
    闭包
  • 原文地址:https://www.cnblogs.com/Diliiiii/p/11272674.html
Copyright © 2011-2022 走看看