1 条题解

  • 1
    @ 2022-7-21 21:15:23
    #include<bits/stdc++.h>
    #define mul(x,y) Wuguidechengfa(x,y)
    using namespace std;
    typedef long long ll;
    const int N=40;
    inline ll read()
    {
    	char c;ll res=0;
    	for(;!isdigit(c);c=getchar());
    	for(;isdigit(c);c=getchar())res=(res<<3)+(res<<1)+(c^48);
    	return res;
    }
    ll mod,a,c,x0,n,g;
    ll Wuguidechengfa(ll x,ll y)
    {
    	ll ans=0;
    	while(y)
    	{
    		if(y&1) (ans+=x)%=mod;
    		(x+=x)%=mod;
    		y>>=1;
    	}
    	return ans;
    }
    //龟速乘
    struct Mat
    {
    	ll a[N][N];
    	//矩阵
    	int n,m;
    	//行、列
    	Mat(){n=m=0;memset(a,0,sizeof a);}
    	//构造空矩阵
    	Mat(int k){n=m=k;memset(a,0,sizeof a);for(int i=1;i<=k;i++)a[i][i]=1;}
    	//构造k*k的单位矩阵
    	Mat(int x,int y){n=x,m=y;memset(a,0,sizeof a);}
    	//构造x*y的空矩阵
    	Mat operator *(Mat b)
    	{
    		Mat c(n,b.m);
    		for(int i=1;i<=c.n;i++)
    		{
    			for(int j=1;j<=c.m;j++)
    			{
    				for(int k=1;k<=m;k++)
    				{
    					c.a[i][j]=(c.a[i][j]+mul(a[i][k],b.a[k][j]))%mod;
    					//注意这里用龟速乘而不是直接写乘号
    				}
    			}
    		}
    		return c;
    	}
    	Mat operator *=(Mat b)
    	{
    		return *this=*this*b;
    	}
    	//重载乘法
    	Mat operator ^(ll k)
    	{
    		Mat ans(n),t=*this;
    		while(k)
    		{
    			if(k&1) ans*=t;
    			t*=t;
    			k>>=1;
    		}
    		return ans;
    	}
    	Mat operator ^=(ll k)
    	{
    		return *this=*this^k;
    	}
    	//矩阵快速幂
    };
    int main()
    {
    	mod=read();a=read();c=read();x0=read();n=read();g=read();
    	if(!n)return printf("%d\n",x0)&0;
    	//特判n==0的情况
    	Mat res(4,4);
    	res.a[1][1]=a,res.a[1][2]=1,res.a[2][2]=1;
    	//构造转移矩阵
    	Mat p(2,1);
    	p.a[1][1]=x0,p.a[2][1]=c;
    	//构造初始矩阵
    	res^=n;
    	res*=p;
    	//注意乘法顺序,矩阵乘法不满足交换律
    	printf("%lld\n",res.a[1][1]%g);
    	//注意答案对g取模
        return 0;
    }
    
    • 1

    随机数生成器 (Random Number Generator)

    信息

    ID
    176
    时间
    5000ms
    内存
    256MiB
    难度
    10
    标签
    递交数
    1
    已通过
    0
    上传者