Cod sursa(job #1532980)

Utilizator depevladVlad Dumitru-Popescu depevlad Data 21 noiembrie 2015 21:45:32
Problema Ciuperci Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.81 kb
#include <fstream>
#include <map>
#include <algorithm>

using namespace std;

ifstream in("ciuperci.in");
ofstream out("ciuperci.out");

const int MOD = 666013;

map < long long, int > H;

int getNr(long long n) {
    int v1, v2, val;

    if(H.find(n) != H.end()) {
        return H.find(n) -> second;
    }
    else {
        v1 = getNr(n / 2);
        if(n & 1) {
            val = (1LL * v1 * v1) % MOD;
        }
        else {
            v2 = getNr((n - 1)/2);
            val = (1LL * 2 * v1 * v2) % MOD;
        }
        H[n] = val;
        return val;
    }
}

int main() {
    int q, i;
    long long n;

    in >> q;
    while(q--) {
        in >> n;

        H.clear();
        H[1] = 1;
        H[2] = 2;
        out << getNr(n) << '\n';
    }

    return 0;
}