Cod sursa(job #1998551)

Utilizator victoreVictor Popa victore Data 8 iulie 2017 13:17:02
Problema Iepuri Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.09 kb
#include<cstdio>
#include<cstring>

using namespace std;

const int mod=666013;

inline void inm(long long a[][3],long long b[][3])
{
    long long rez[3][3];
    memset(rez,0,9*sizeof(long long));
    int i,j,k;
    for(i=0;i<3;++i)
        for(j=0;j<3;++j)
            for(k=0;k<3;++k)
            {
                rez[i][j]+=(a[i][k]*b[k][j])%mod;
                rez[i][j]%=mod;
            }
    memcpy(a,rez,9*(sizeof(long long)));
}

int main()
{
    freopen("iepuri.in","r",stdin);
    freopen("iepuri.out","w",stdout);
    int n,x,y,z,t,a,b,c;
    scanf("%d",&t);
    while(t--)
    {
        scanf("%d%d%d%d%d%d%d",&x,&y,&z,&a,&b,&c,&n);
        long long m[3][3]={{1,0,0},{0,1,0},{0,0,1}};
        long long pow1[3][3]={{a,1,0},{b,0,1},{c,0,0}};
        n-=2;
        while(n)
        {
            if(n&1)
            {
                inm(m,pow1);
                --n;
            }
            inm(pow1,pow1);
            n>>=1;
        }
        long long sol=((m[0][0]*z)%mod + (m[1][0]*y)%mod + (m[2][0]*x)%mod)%mod;
        printf("%lld\n",sol);
    }
}