矩阵加速 10pts 求助
查看原帖
矩阵加速 10pts 求助
674247
seanlsy楼主2022/6/24 19:37

rt,好像每次做矩阵都不能一次 A

#include <bits/stdc++.h>
using namespace std;
#define ll long long
ll n,mod,p,q;
struct jz{
    ll a[2][2];
}base,x;
inline jz mul(jz x,jz y){
    jz z;
    memset(z.a,0,sizeof(z.a));
    for(int k=0;k<2;k++)
        for(int i=0;i<2;i++)
            for(int j=0;j<2;j++)
                z.a[i][j]+=(x.a[i][k]*y.a[k][j]%mod),z.a[i][j]%=mod;
    return z;
}
inline jz Pow(jz x,ll y){
    jz res=x;
    for(y--;y;x=mul(x,x),y>>=1)
        if(y&1)
            res=mul(res,x);
    return res;
}
int main(){
	cin>>p>>q>>base.a[0][0]>>base.a[0][1]>>n>>mod;
	x.a[0][0]=p,x.a[0][1]=q,x.a[1][0]=1;
	if(n==1) return !printf("%lld\n",base.a[0][0]%mod);
	base=mul(base,Pow(x,n-1));
	printf("%lld\n",base.a[0][0]);
    return 0;
}
2022/6/24 19:37
加载中...