hdu 1575 (매트릭스 쾌속 멱 입문 문제)

3866 단어 수론
제목 링크 hdu 1575
struct mat{
    int m[maxn][maxn];
}unit;//       
**    *    *  **
mat operator * (mat a,mat b)
{
    mat ret;
    ll x;
    for(int i=0;ifor(int j=0;j0;
        for(int k=0;kmod((ll)a.m[i][k]*b.m[k][j]);
        ret.m[i][j]=mod(x);
    }
    return ret;
}
#include
#include
using namespace std;
#define mod(x) ((x)%9973)
typedef long long ll;
const int maxn =11;
int n;
struct mat{
    int m[maxn][maxn];
}unit;
//    
mat operator * (mat a,mat b)
{
    mat ret;
    ll x;
    for(int i=0;ifor(int j=0;j0;
        for(int k=0;kreturn ret;
}
void init_unit()
{
    for(int i=0;i1;
    return ;
}
mat pow_mat(mat a,ll n)
{
    mat ret=unit;
    while(n)
    {
        if(n&1)
        {
            ret= ret*a;
        }
        n>>=1;
        a=a*a;
    }
    return ret;
}
int main()
{
    ios::sync_with_stdio(false);
    int x;
    int T;
    cin>>T;
    init_unit();
    while(T--&&cin>>n>>x)
    {
        mat a;
        for(int i=0;ifor(int j=0;jcin>>a.m[i][j];
        a=pow_mat(a,x);
        ll ans=0;
        for(int i=0;i9973;
        cout<return 0;
}

좋은 웹페이지 즐겨찾기