60pts求条
查看原帖
60pts求条
772875
RAY091016楼主2025/7/31 14:47

如题,code:

#include<bits/stdc++.h>
#define int long long
using namespace std;
int m,a,c,x0,g,n;
struct matrix{
	int a[5][5];
};
int cheng(int a,int b){
	int ret=0;
	while(b){
		if(b&1){
			ret=(ret+a)%m;
		}
		a=(a+a)%m;
		b>>=1;
	}
	return ret;
}
matrix operator*(matrix A,matrix B){
	matrix C;
	for(int i=1;i<=2;i++){
		for(int j=1;j<=2;j++){
			int cnt=0;
			for(int k=1;k<=2;k++){
				cnt=(cnt+cheng(A.a[i][k],B.a[k][j]))%m;
			}
			C.a[i][j]=cnt;
		}
	}
	return C;
}
matrix qpow(matrix base,int up){
	matrix ret;
	memset(ret.a,0,sizeof ret.a);
	for(int i=1;i<=2;i++){
		ret.a[i][i]=1;
	}
	while(up){
		if(up&1){
			ret=ret*base;
		}
		base=base*base;
		up>>=1;
	}
	return ret;
}
signed main(){
	cin>>m>>a>>c>>x0>>n>>g;
	a%=m,c%=m,x0%=m;
	matrix A;
	A.a[1][1]=a,A.a[1][2]=1,A.a[2][1]=0,A.a[2][2]=1;
	matrix tmp=qpow(A,n);
	cout<<((tmp.a[1][1]*x0+tmp.a[1][2]*c)%m)%g;
	return 0;
}
2025/7/31 14:47
加载中...