代码写破防了,玄关求条
查看原帖
代码写破防了,玄关求条
822439
lhz2022楼主2024/9/22 08:23
#include<bits/stdc++.h>
using namespace std;
#define int long long
#define debug() puts("I WILL AK")
#define N 100007
#define M 107
int P;
int p,q,a1,a2,n;
struct matrix{
	int a[M][M],n,m;
	matrix operator *(const matrix &b) const{
		matrix r;
		r.n=n,r.m=b.m;
		for(int i=1;i<=n;++i){
			for(int j=1;j<=b.m;++j){
				r.a[i][j]=0;
			}
		}
		for(int i=1;i<=n;++i){
			for(int j=1;j<=b.m;++j){
				for(int k=1;k<=m;++k){
					r.a[i][j]=(r.a[i][j]+a[i][k]*b.a[k][j])%P;
				}
			}
		}
		return r;
	}
};
matrix ksm(matrix a,int b){
	matrix ans;
	ans.n=2,ans.m=2;
	ans.a[1][1]=a2,ans.a[1][2]=a1;
	while(b){
		if(b&1) ans=ans*a;
		b>>=1;
		a=a*a;
	}
	return ans;
}
signed main(){
	//freopen(".in","r",stdin);
	//freopen(".out","w",stdout);
	cin>>p>>q>>a1>>a2>>n>>P;
	if(n==1){
		cout<<a1;
		return 0;
	}
	if(n==2){
		cout<<a2;
		return 0;
	}
	matrix a;
	a.n=2,a.m=2;
	a.a[1][1]=p,a.a[1][2]=q;
	a.a[2][1]=1;
	a.a[2][2]=0;
	cout<<ksm(a,n-2).a[1][1];
	return 0;
}
2024/9/22 08:23
加载中...