矩阵快速幂板子全WA求助
查看原帖
矩阵快速幂板子全WA求助
378706
MoyunAllgorithm楼主2023/7/30 23:42
#include <bits/stdc++.h>
#define LL long long
using namespace std;
const int MOD=1e9+7;
int M,A,C,X,N,G;
struct Matrix
{
	LL v[105][105];
	int n,m;
	void Set()
	{
		n=m=2;
		for(int i=1;i<=2;i++)
		{
			for(int j=1;j<=2;j++) v[i][j]=0;
		//	v[i][i]=1;
		}
		return;
	}
};
Matrix Mul(Matrix a,Matrix b,int mod)
{
	Matrix res;
	res.Set();
//	for(int i=1;i<=2;i++) res.v[i][i]=0;
//puts("----");
	for(int i=1;i<=2;i++)
	{
		for(int j=1;j<=2;j++)
		{
			for(int k=1;k<=2;k++)
			{
				res.v[i][j]=(res.v[i][j]+(__int128)a.v[i][k]*b.v[k][j]%mod)%mod;
			//	printf("%d %d %lld\n",i,j,res.v[i][j]);
			}
		}
	}
}
Matrix a,b;
Matrix QPow(Matrix base,LL po,int mod)
{
	Matrix res;
	res.Set();
	res.v[1][1]=res.v[2][2]=1;
	while(po)
	{
		if(po&1) res=Mul(res,base,mod);
		base=Mul(base,base,mod);
		po>>=1;
	}
	return res;
}
int main()
{
    scanf("%lld %lld %lld %lld %lld %lld",&M,&A,&C,&X,&N,&G);
 	a.Set(),b.Set();
 	a.v[1][1]=X,a.v[2][1]=C;
    b.v[1][1]=A,b.v[1][2]=1,b.v[2][1]=0,b.v[2][2]=1;
    Matrix res=QPow(b,N,M);
    res=Mul(res,a,M);
    printf("%lld\n",res.v[1][1]%G);
    return 0;
}
2023/7/30 23:42
加载中...