求助 最后一点wa QAQ
查看原帖
求助 最后一点wa QAQ
221551
Bker_楼主2022/8/21 20:46

rt

#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
#define ll long long

ll p , q , a1 , a2 , n , mod ;

struct mat{
    ll g[4][4] ;
};

mat ans , a ;

mat mul(mat a , mat b){
    mat ans ;
    for(int i = 1 ; i <= 2 ; i++)
        for(int j = 1 ; j <= 2 ; j++)
            ans.g[i][j] = 0 ;
    for(int i = 1 ; i <= 2 ; i++)
        for(int j = 1 ; j <= 2 ; j++)
            for(int k = 1 ; k <= 2 ; k++)
                ans.g[i][j] += ( a.g[i][k] * b.g[k][j]) % mod ;
    return ans ;
}

mat qpow(mat a , ll x){
    while(x){
        if(x & 1)   ans = mul(ans , a) ;
        a = mul(a , a) ;
        x >>= 1 ;
    }
    return ans ;
}

int main(){
    scanf("%lld %lld %lld %lld %lld %lld" , &p , &q , &a1 , &a2 , &n , &mod);
    for(int i = 1 ; i <= 2 ; i++)
    for(int j = 1 ; j <= 2 ; j++){
        ans.g[i][j] = 0 ;
            a.g[i][j] = 0 ;
    }
    a.g[1][1] = p ;
    a.g[1][2] = 1 ;
    a.g[2][1] = q ;
    ans.g[1][1] = a2 , ans.g[1][2] = a1 ;
    ans = qpow(a , n - 2) ;
    if(n == 1){
        cout<<a1 ;
        return 0 ;
    }else if(n == 2){
        cout<<a2 ;
        return 0 ;
    }else{
    //for(int i = 1 ; i <= 2 ; i++)
    //{
    //    for(int j = 1 ; j <= 2 ; j++)
    //        cout<<ans.g[i][j] % mod <<" " ;
    //    cout<<endl ;
    //}
    cout<<ans.g[1][1] % mod;
    }

    return 0 ;
}

2022/8/21 20:46
加载中...