1 条题解

  • 1
    @ 2023-8-4 10:44:19

    image

    #include <bits/stdc++.h>
    #define ll long long
    #define mod 1000000007
    using namespace std;
    const int N=3;
    int k,s,t,p;
    ll n;
    struct Matrix{
    	ll a[N][N];
    	Matrix(){ memset(a,0,sizeof(a));}//构造函数,矩阵初始化全零 
    	Matrix operator*(Matrix &b)const{//重载乘法运算 
    		Matrix tmp;
    		for (int k=1;k<=2;++k)
    			for (int i=1;i<=2;++i)
    				for (int j=1;j<=2;++j)
    					(tmp.a[i][j]+=a[i][k]*b.a[k][j])%=mod;
    		return tmp;		
    	}
    }a,ans;
    void qpow(ll p){
    	for (int i=1;i<=2;++i)
    		ans.a[i][i]=1;//ans初始化为单位矩阵 
    	while (p){
    		if (p&1) ans=ans*a;
    		a=a*a;
    		p>>=1;
    	}
    }
    int main(){
    	cin>>n;
    	a.a[1][2]=a.a[2][1]=a.a[2][2]=1;
    	qpow(n);
    	cout<<ans.a[2][1]; 
    } 
    
    
    
    
    
  • 1

信息

ID
375
时间
1000ms
内存
128MiB
难度
5
标签
递交数
123
已通过
45
上传者