Cod sursa(job #987374)

Utilizator smaraldaSmaranda Dinu smaralda Data 20 august 2013 15:45:48
Problema Iepuri Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.26 kb
#include<stdio.h>
#include<string.h>
#define MOD 666013
long long a,b,c,x,y,z;

class Matrix {
    public:
    long long m[5][5];
    Matrix () {
        memset(m,0,sizeof(m));
        m[1][2]=m[2][3]=1;
        m[3][1]=c;
        m[3][2]=b;
        m[3][3]=a;
        }

    Matrix (long long val){
        memset(m,0,sizeof(m));
        }

    Matrix operator * (Matrix other) {
        long long i,j,k;
        Matrix res(0);
        for(i = 1 ; i < 4 ;i++)
            for(j = 1 ; j < 4 ;j++)
                for(k = 1 ; k < 4 ; k++)
                    res.m[i][j] = (res.m[i][j] + (m[i][k] * other.m[k][j]) % MOD) % MOD;
        return res;
        }
    };

Matrix lgPow (Matrix a, int p) {
    if(p == 1) return a;
    if(p & 1)
        return a * lgPow(a,p-1);
    Matrix jum;
    jum=lgPow(a,p / 2);
    return jum * jum;
}

int main () {
    freopen("iepuri.in","r",stdin);
    freopen("iepuri.out","w",stdout);
    long long n,tc;
    scanf("%lld",&tc);
    while(tc) {
        scanf("%lld%lld%lld%lld%lld%lld%lld",&x,&y,&z,&a,&b,&c,&n);
        Matrix M;
        M = lgPow(M,n-2);
        printf("%lld\n",((x * M.m[3][1]) % MOD + (y * M.m[3][2]) % MOD + (z * M.m[3][3]) % MOD) % MOD);
        tc--;
        }
    return 0;
}