模板--快速幂及矩阵快速幂

快速幂



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
#include
#include

using namespace std;
typedef long long ll;
typedef vectorvec;
typedef vectormat;
const ll N=1000000009;

mat mul(mat a,mat b)  //矩阵乘法
{
    mat c(a.size(),vec(b[0].size()));
    for(ll i=0;i0)
    {
        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\n",a[1][0]);
    }
}
int main()
{
    solve();
    return 0;
}




你可能感兴趣的:(【ACM之路Bryce模板】)