Cod sursa(job #2871141)

Utilizator gabriel10tm@gmail.comGabriel Marian [email protected] Data 12 martie 2022 21:42:32
Problema Iepuri Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.46 kb
#pragma region Header
#define _CRT_SECURE_NO_WARNINGS

#include <bits/stdc++.h>
#include <unordered_set>
#include <unordered_map>
#include <chrono>
#include <map>
#include <thread>
#include <mutex>
#include <future>

typedef unsigned long long ull;
typedef long long ll;
typedef unsigned int uint;
#define endl '\n'
using namespace std;
#if 1

#include <fstream>

ifstream fin("iepuri.in");
ofstream fout("iepuri.out");
#define cin fin
#define cout fout
#endif

#pragma endregion

const int MOD = 666013;
struct Mat
{
    ll a[3][3]{};
    Mat operator*(const Mat& b)
    {
        Mat res{};
        for(int i =0;i<3;i++)
            for(int j=0;j<3;j++)
                for(int k=0;k<3;k++)
                    res.a[i][j] = (res.a[i][j] + (a[i][k]%MOD* b.a[k][j])%MOD )%MOD;
        return res;
    }
};
Mat fast_exp(Mat m,int p)
{
    Mat res;
    res.a[0][0] = res.a[1][1] = res.a[2][2] = 1;

    while(p)
    {
        if(p%2==1)
        {
            res = res * m;
        }
        m = m*m;
        p/=2;
    }
    return res;
}
int main()
{
    int t,n,x,y,z,a,b,c;
    cin >> t;
    while(t--)
    {
        cin >>x>>y>>z>>a>>b>>c>>n;
        Mat res{};
        res.a[0][1] = 1;
        res.a[1][2] = 1;
        res.a[2][0] = c;
        res.a[2][1] = b;
        res.a[2][2] = a;


        Mat r = fast_exp(res,n-2);
        cout << (r.a[2][0]*x%MOD+r.a[2][1]*y%MOD+r.a[2][2]*z%MOD)%MOD <<endl;
    }
}