Cod sursa(job #2732799)

Utilizator MihneaCadar101Cadar Mihnea MihneaCadar101 Data 29 martie 2021 13:09:10
Problema Ciuperci Scor 30
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.85 kb
#include <bits/stdc++.h>

using namespace std;
ifstream fin("ciuperci.in");
ofstream fout("ciuperci.out");
const int MOD = 666013;
const int MMOD = 35;
int q;
long long n;
vector <pair <long long, int> > h[MMOD];

long long rezolvare(long long n) {
    if (n == 1)
        return 1;

    if (n == 2)
        return 2;

    int key = n % MMOD;
    for (int i = 0; i < h[key].size(); ++i) {
        if (n == h[key][i].first) return h[key][i].second;
    }

    long long dp;
    dp = rezolvare((n - 1) / 2) % MOD;
    if (n % 2) {
        dp = (1LL * dp * dp) % MOD;
    }
    else {
        dp = (dp * rezolvare((n - 1) / 2 + 1) * 2LL) % MOD;
    }

    h[key].push_back({n, dp});
    return dp;
}

int main()
{
    fin >> q;
    while(q--){
        fin >> n;
        fout << rezolvare(n) % MOD << '\n';
    }
    return 0;
}