Cod sursa(job #639556)

Utilizator Teodor94Teodor Plop Teodor94 Data 23 noiembrie 2011 15:53:14
Problema Ciuperci Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.81 kb
#include<cstdio>

const int MOD = 666013;
const int N = 200001;

int d[N];

long long arbore(long long x) {
    if (x < N)
        return d[x];

    if (x % 2 == 1) {
        long long rez = arbore(x / 2);
        return rez * rez % MOD;
    }

    return arbore(x / 2 - 1) * arbore(x / 2) % MOD * 2 % MOD;
}

void rez() {
    int t;
    scanf("%d", &t);

    for (int i = 1; i <= t; ++i) {
        long long n;
        scanf("%lld", &n);
        printf("%lld\n", arbore(n));
    }
}

void dinamica() {
    d[1] = 1;
    d[2] = 2;
    for (int i = 3; i < N; ++i)
        if (i & 1)
            d[i] = d[i / 2] * d[i / 2];
        else
            d[i] = d[i / 2 - 1] * d[i / 2] * 2;
}

int main() {
    freopen("ciuperci.in", "r", stdin);
    freopen("ciuperci.out", "w", stdout);

    dinamica();

    rez();

    return 0;
}