• 矩阵快速幂


    #include<bits/stdc++.h>
    using namespace std;
    #define INF 0x3f3f3f3f
    #define Mod 100000007
    typedef long long ll;
    #define N 2//这里表示2*2的矩阵//如果是3*3的  则可以令为N 3 
    struct Mu{
      ll    a[N][N];
      Mu(){
             memset(a,0,sizeof(a));
      }
    };
    Mu Multiply(Mu t1,Mu t2){//求两个矩阵相乘 
          Mu res;
          for(ll i=0;i<N;i++){
                for(ll j=0;j<N;j++){
                       for(ll k=0;k<N;k++)
                       {
                                 res.a[i][j]=(res.a[i][j]+t1.a[i][k]*t2.a[k][j])%Mod;
                       }
                }
          }
          return res;
    } 
    Mu QP(Mu x,ll n)//矩阵快速幂 返回结果对象 
    {
           Mu res;
           res.a[0][0]=res.a[1][1]=res.a[2][2]=1;//单位矩阵
           while(n){
                 if(n&1){
                        res=Multiply(res,x);
                 }
                 x=Multiply(x,x);
                 n>>=1;
           } 
           return res;
    }
    Mu ans;
    ll n,F1=1,F2=1;
    void init(){
        //初始化矩阵
      //比如斐波那契数列 
        ans.a[0][0]=ans.a[0][1]=ans.a[1][0]=1;
    }
    void Ans(){
         ans=QP(ans,n-2);//算ans^n
        cout<<(ans.a[0][0]*F1+ans.a[0][1]*F2)%Mod<<endl;
    }
    int main(){
        cin>>n;
        if(n==1) return cout<<F1<<endl,0;
        else if(n==2) return  cout<<F2<<endl,0;
        init();
        Ans();
        return 0;
    }
    rush!
  • 相关阅读:
    curl -L 跟随跳转
    Http报头Accept与Content-Type的区别
    curl 发送json请求
    IntelliJ 中类似于Eclipse ctrl+o的是ctrl+F12
    Spring AOP
    Windows下Nginx配置SSL实现Https访问(包含证书生成)
    @Retention n. 保留
    Exchanger使用
    Semaphore使用
    UVA12493
  • 原文地址:https://www.cnblogs.com/LH2000/p/13221542.html
Copyright © 2020-2023  润新知