50分求调
查看原帖
50分求调
219429
吕航楼主2023/5/14 09:03
#include<bits/stdc++.h>
using namespace std;
inline void read(unsigned long long &n)
{
	unsigned long long x=0,f=1;
	char ch;
	for(ch=getchar();!(ch>='0'&&ch<='9')&&ch!='-';ch=getchar());
	if(ch=='-')
	{
		f=-1;
		ch=getchar();
	}
	while(ch>='0'&&ch<='9')
	{
		x=(x<<1)+(x<<3)+ch-'0';
		ch=getchar();
	}
	n=x*f;
}
const unsigned long long mod=1000000007;
unsigned long long n,m,a,c,x0,g;
struct mul
{
	unsigned long long a[105][105];
	mul()
	{
		memset(a,0,sizeof a);
	}
	inline void build()
	{
		for(int i=1;i<=n;i++) a[i][i]=1;
	}
}a1,ans;
mul operator *(const mul &x,const mul &y)
{
	mul z;
	for(int k=1;k<=2;k++)
	{
		for(int i=1;i<=2;i++)
		{
			for(int j=1;j<=2;j++)
			{
				z.a[i][j]=(z.a[i][j]+x.a[i][k]*y.a[k][j]%m)%m;
			}
		}
	}
	return z;
}
int main()
{
	read(m);read(a);read(c);read(x0);read(n);read(g);
	ans.a[1][1]=x0;
	ans.a[2][1]=c;
	a1.a[1][1]=a;a1.a[1][2]=1;
	a1.a[2][1]=0;a1.a[2][2]=1;
	do
	{
		if(n&1) ans=a1*ans;
		a1=a1*a1;
		n>>=1;
	}while(n);
	printf("%u\n",ans.a[1][1]%g);
	return 0;
}
2023/5/14 09:03
加载中...