zoukankan      html  css  js  c++  java
  • 模板--快速幂及矩阵快速幂

    快速幂



    typedef long long ll;
    ll fun(ll x,ll n)
    {
        ll res=1;
        while(n>0)
        {
            if(n&1)
                res=(res*x)%Max;
            x=(x*x)%Max;
            n>>=1;
        }
        return res;
    }


    矩阵快速幂

    #include<cstdio>
    #include<iostream>
    #include<vector>
    
    using namespace std;
    typedef long long ll;
    typedef vector<long long>vec;
    typedef vector<vec>mat;
    const ll N=1000000009;
    
    mat mul(mat a,mat b)  //矩阵乘法
    {
        mat c(a.size(),vec(b[0].size()));
        for(ll i=0;i<a.size();i++)
        {
            for(ll k=0;k<b.size();k++)
            {
    
    
    
            for(ll j=0;j<b[0].size();j++)
            {
                c[i][j]=(c[i][j]+a[i][k]*b[k][j])%N;
            }
            }
        }
        return c;
    
    }
    
    mat solve_pow(mat a,ll n)  //快速幂
    {
        mat b(a.size(),vec(a.size()));
        for(ll 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;
    void solve()
    {
        mat a(2,vec(2));
        while(~scanf("%lld",&n)&&n!=-1)
        {
            a[0][0]=1,a[0][1]=1;
            a[1][0]=1,a[1][1]=0;
            a=solve_pow(a,n);
            printf("%lld
    ",a[1][0]);
        }
    }
    int main()
    {
        solve();
        return 0;
    }




  • 相关阅读:
    ***EF中的问题(复习的同学可略过)
    课堂练习
    MVC-07 案例2
    MVC-06 安装部署
    MVC-05 Model(2)
    MVC-05 Model(1)
    MVC-04 视图(3)
    Learning Web
    MVC-04 视图(2)
    hdu 1272 并查集
  • 原文地址:https://www.cnblogs.com/bryce1010/p/9387167.html
Copyright © 2011-2022 走看看