求助
查看原帖
求助
285617
黑影洞人楼主2022/2/23 11:16
#include<algorithm>
#include<cstring>
#include<cstdio>
#include<cctype>
#define int long long
#define N 105
#define re register
using namespace std;
int n,q,p,a1,a2,mod;
struct map{
	long long m[N][N];
	map(){memset(m,0,sizeof m);}
	inline void csh(){for(int i=1;i<=5;++i)m[i][i]=1;}
}a,b;
map chen(map x,map y){     
	map z;
	for(int k=1;k<=5;++k)
		for(int i=1;i<=5;++i)
			for(int j=1;j<=5;++j)
				z.m[i][j]=(z.m[i][j]+x.m[i][k]*y.m[k][j]%mod)%mod;
	return z;
}
long long k;
signed main(){
 	scanf("%lld%lld%lld%lld%lld%lld",&p,&q,&a1,&a2,&n,&mod);
	//if(n<=2){printf("1");return 0;}
	if(n==1){printf("%lld",a1);return 0;}
	if(n==2){printf("%lld",a2);return 0;}
	a.m[1][1]=a1,a.m[1][2]=a2;
	b.m[1][1]=p,b.m[1][2]=q,b.m[2][1]=1;
 	map ans;ans.csh();
 	k=n-1;
 	do{if(k&1)ans=chen(ans,b);b=chen(b,b);k>>=1;}while(k);
	printf("%lld",chen(ans,a).m[1][1]%mod);
	return 0;
}
2022/2/23 11:16
加载中...