90pts求助
查看原帖
90pts求助
643818
I_AK_CTS楼主2025/7/2 11:47
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int MOD=1e9+7;
int a,b,c,d,nn,mm,nnn,mmm;
string n,m;
struct Mx
{
	int r,c,a[3][3];
	friend Mx operator*(const Mx &A,const Mx &B)
	{
		Mx C;C.r=A.r,C.c=B.c;
		for(int i=1;i<=C.r;i++)
			for(int j=1;j<=C.c;j++)
				C.a[i][j]=0;
		for(int k=1;k<=A.c;k++)
			for(int i=1;i<=C.r;i++)
				for(int j=1;j<=C.c;j++)
					C.a[i][j]=(C.a[i][j]+A.a[i][k]*B.a[k][j]%MOD)%MOD;
		return C;
	}
}A,B,F,C,I;
Mx ksm(Mx AA,int x)
{
	Mx res=I;
	for(;x;x>>=1,AA=AA*AA)
		if(x&1) res=res*AA;
	return res;
}
int jian(int x,int y)
{
	if(x<y) return x-y+MOD-1;
	return x-y;
}
signed main()
{
	cin>>n>>m>>a>>b>>c>>d;
	for(int i=0;i<n.size();i++)
	{
		nn=(nn*10%(MOD-1)+n[i]-'0')%(MOD-1);
		nnn=(nnn*10%MOD+n[i]-'0')%MOD;
	}
	for(int i=0;i<m.size();i++)
	{
		mmm=(mmm*10%MOD+m[i]-'0')%MOD;
		mm=(mm*10%(MOD-1)+m[i]-'0')%(MOD-1);
	}
	I.r=I.c=2,I.a[1][1]=I.a[2][2]=1;
	A.r=A.c=B.r=B.c=F.r=2,F.c=1;
	A.a[1][1]=a,A.a[1][2]=b,A.a[2][2]=1;
	B.a[1][1]=c,B.a[1][2]=d,B.a[2][2]=1;
	F.a[1][1]=F.a[2][1]=1;
	F=ksm(ksm(A,jian(mm,1))*B,jian(nn,1))*ksm(A,jian(mm,1))*F;
	cout<<F.a[1][1];
	return 0;
}
2025/7/2 11:47
加载中...