1 条题解

  • 1
    @ 2023-8-7 17:46:47

    image

    #include<bits/stdc++.h>
    #define ll long long
    using namespace std;
    ll n,m,k,s,t,g,X0;
    ll mul(ll a,ll b){// 龟速乘 a*b 
    	ll tmp=0;
    	for (;b;b>>=1){
    		if (b&1) tmp=(tmp+a)%m;
    		a=(a+a)%m;
    	}
    	return tmp;
    }
    struct Matrix{
    	ll a[2][2];
    	Matrix operator*(const Matrix &b)const{
    		Matrix tmp;
    		memset(tmp.a,0,sizeof(tmp.a));
    		for (int i=0;i<2;++i)
    			for (int j=0;j<2;++j)
    				for (int k=0;k<2;++k)
    					tmp.a[i][j]=(tmp.a[i][j]+mul(a[i][k],b.a[k][j]))%m;
    		return tmp;
    	}
    }ans,a;
    int main(){
    	cin>>m>>a.a[0][0]>>a.a[1][0]>>X0>>n>>g;
    
    	a.a[1][1]=1;
    	ans.a[0][0]=ans.a[1][1]=1;
    	for (;n;n>>=1){
    		if (n&1) ans=ans*a;
    		a=a*a;
    	}
    	cout<<(mul(X0,ans.a[0][0])+ans.a[1][0])%m%g;
    }
    
    • 1

    信息

    ID
    377
    时间
    1000ms
    内存
    125MiB
    难度
    5
    标签
    递交数
    86
    已通过
    36
    上传者