40pts求助
查看原帖
40pts求助
982938
SnowFlavour楼主2023/11/24 21:21

40分求助qwq

#include<iostream>
#include<cstring>
#include<cstdio>
#define LL long long
using namespace std;
const long long N=105;
const long long MD=19260817;
struct Matrix{
	long long a[N][N];
};
Matrix A,B;
long long n,p;
Matrix operator *(Matrix A,Matrix B){
	Matrix C;
	memset(C.a,0,sizeof(C.a));
	for(int i=1;i<=3;i++){
		for(int j=1;j<=3;j++){
			for(int k=1;k<=3;k++){
				C.a[i][j]=C.a[i][j]+A.a[i][k]*B.a[k][j];
			}
		}
	}
	return C;
}
Matrix Fast(Matrix A,long long n){
	Matrix S=A;
	n--;
	while(n){
		if(n&1){
			S=S*A;
		}
		A=A*A;
		n=n>>1;
	}
	return S;
}
int main(){
	long long t;
	cin>>t;
	while(t--){
		cin>>n;
		if(n<=1){
			cout<<2<<endl;
			continue;
		}
	    A.a[1][1]=A.a[2][1]=A.a[3][1]=A.a[1][2]=A.a[2][3]=1;
	    Matrix S=Fast(A,n-1);
	    Matrix R;
		R.a[1][1]=1;
		R.a[1][2]=1;
		R.a[1][3]=0;
		R=R*S;
	    cout<<(R.a[1][1]+R.a[1][2]+R.a[1][3])%MD<<endl;
	}
	return 0;
}
2023/11/24 21:21
加载中...