0分求助
查看原帖
0分求助
575994
Hisaishi_Kanade楼主2022/9/11 08:10

Rt,哪里挂了

#include <stdio.h>
#include <string.h>
long long mod,a,c,x0,n,g,N;
const int MAXN=2;
inline long long mul(long long x,long long y){
    long long ans(0);
    while(y){
        if(y&1)
            (ans+=x)%=mod;
        (x<<=1)%=mod;
        y>>=1;
    }
    return ans;
}
class Matrix{
    public:
        long long f[MAXN][MAXN];
        Matrix(){
            memset(f,0,sizeof f);
        }
        inline Matrix &operator*=(Matrix other){
            int i,j,k;
            Matrix mid;
            for(i=0;i<MAXN;++i)
                for(j=0;j<MAXN;++j)
                    for(k=0;k<MAXN;++k)
                        (mid.f[i][j]+=mul(f[i][k],other.f[k][j])%mod)%=mod;
            return *this=mid;
        }
}ans,base;
int main(){
    scanf("%lld %lld %lld %lld %lld %lld",&mod,&a,&c,&x0,&n,&g);
    ans.f[0][0]=x0;ans.f[1][0]=c;
    base.f[0][0]=a;base.f[0][1]=1;
    base.f[1][0]=0;base.f[1][1]=1;
    N=n;
    while(N){
        if(N&1)
            ans*=base;
        base*=base;
        N>>=1;
    }
    printf("%lld",ans.f[0][0]%g);
    return 0;
}
/*
x[i]=a*x[i-1]+1*c
c   =0*x[i-1]+1*c
[x] * [a,1]
[c]   [0,1]
*/
2022/9/11 08:10
加载中...