Pagini recente » Cod sursa (job #360018) | Cod sursa (job #2199045) | Cod sursa (job #1010303) | Cod sursa (job #1534047) | Cod sursa (job #1293373)
#include <stdio.h>
#define LOGMAX 54
#define MOD 9997
int ult[MOD], hnext[2 * LOGMAX + 2], dr;
long long hrez[2 * LOGMAX + 2], hn[2 * LOGMAX + 2];
int caut(long long n){
int poz = ult[n % MOD];
while(poz > 0 && hn[poz] != n)
poz = hnext[poz];
return poz;
}
long long nrarb(long long n){
if(n == 1 || n == 0)
return 1;
long long x = caut(n);
if(x != 0)
return hrez[x];
long long rez;
n--;
if(n & 1)
rez = 2 * nrarb(n / 2 + 1) * nrarb(n / 2);
else
rez = nrarb(n / 2) * nrarb(n / 2);
hrez[dr] = rez;
hn[dr] = n;
hnext[dr] = ult[n % MOD];
ult[n % MOD] = dr;
dr++;
return rez;
}
int main(){
FILE *in = fopen("ciuperci.in", "r");
FILE *out = fopen("ciuperci.out", "w");
int q, i, j;
long long n;
fscanf(in, "%d", &q);
hrez[1] = 1;
hn[1] = 1;
ult[1] = 1;
for(i = 0; i < q; i++){
for(j = 0; j < MOD; j++)
ult[j] = 0;
fscanf(in, "%lld", &n);
dr = 2;
fprintf(out, "%lld\n", nrarb(n));
}
fclose(in);
fclose(out);
return 0;
}