Cod sursa(job #987508)

Utilizator smaraldaSmaranda Dinu smaralda Data 20 august 2013 21:37:41
Problema Iepuri Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.12 kb
#include<stdio.h>
#include<string.h>
#define MOD 666013
int a,b,c,x,y,z;

struct Matrix {
    int m[5][5];
    };

Matrix mult (Matrix a, Matrix b) {
    long long i,j,k;
    Matrix res;
    memset(res.m,0,sizeof(res.m));
    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] + (a.m[i][k] * b.m[k][j]) % MOD) % MOD;
    return res;
}

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

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