Pagini recente » Cod sursa (job #2944076) | Cod sursa (job #1780470) | Cod sursa (job #817247) | Cod sursa (job #900912) | Cod sursa (job #1533047)
#include <fstream>
#include <algorithm>
using namespace std;
ifstream in("ciuperci.in");
ofstream out("ciuperci.out");
const int MOD = 666013;
const int HMOD = 307;
struct hashElement {
long long key;
int val;
};
vector < hashElement > H[HMOD];
inline int hFind(long long key) {
for(auto it : H[key % HMOD]) {
if(it.key == key) {
return it.val;
}
}
return -1;
}
inline void hAdd(long long key, int val) {
if(hFind(key) == -1) {
H[key % HMOD].push_back(hashElement{key, val});
}
}
inline void hReset() {
for(register int i = 0; i < HMOD; i++) {
H[i].clear();
}
hAdd(1, 1);
hAdd(2, 2);
}
inline int getNr(long long n) {
int v1, v2, val;
val = hFind(n);
if(val != -1) {
return val;
}
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;
}
hAdd(n, val);
return val;
}
}
int main() {
int q, i, j = 0;
long long n;
in >> q;
while(q--) {
hReset();
in >> n;
out << getNr(n) << '\n';
}
return 0;
}