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;
    }




  • 相关阅读:
    es6-字符串常用方法
    新增行数据校验
    python-Django路由传参
    递归算法
    CSS动画效果
    克隆远程仓库
    添加git仓库
    滚动条——overflow:auto 自定义样式
    CSS——链接伪类选择器
    进程,线程,同步 ,异步
  • 原文地址:https://www.cnblogs.com/bryce1010/p/9387167.html
Copyright © 2011-2022 走看看