救命啊,80分
查看原帖
救命啊,80分
821849
TFHS_arsc楼主2025/6/22 15:42
#include<iostream>

using namespace std;

const int mod = 1e9+7;

int n;

struct mat{
	long long a[2][2];
	friend mat operator*(mat a,mat b){
		mat c;
		for(int i=0;i<2;i++)
			for(int j=0;j<2;j++) c.a[i][j]=0;
		for(int i=0;i<2;i++)
			for(int j=0;j<2;j++)
				for(int k=0;k<2;k++) c.a[i][j]=(c.a[i][j]+a.a[i][k]*b.a[k][j]%mod)%mod;
		return c;
	}
};

mat _pow(mat a,int b){
	mat res;
	for(int i=0;i<2;i++)
		for(int j=0;j<2;j++) res.a[i][j]=0;
	for(int i=0;i<2;i++) res.a[i][i]=1;
	while(b){
		if(b%2==1) res=res*a;
		a=a*a;
		b/=2;
	}
	return res;
}

int main(){
	
	cin>>n;
	if(n<=2){
		cout<<"1";
		return 0;
	}
	mat bsc;
	bsc.a[0][0]=1,bsc.a[0][1]=1,bsc.a[1][0]=1,bsc.a[1][1]=0;
	mat ans=_pow(bsc,n-1);
	cout<<ans.a[0][0]%mod;
	
	return 0;
}
2025/6/22 15:42
加载中...