Pagini recente » Rating Victor Dughie (victordug) | Rating Cristian Pavel (Cirsti) | Cod sursa (job #3003363) | Cod sursa (job #2853652) | Cod sursa (job #2857550)
#include <fstream>
#include <vector>
#include <map>
using namespace std;
ifstream in("ciuperci.in");
ofstream out("ciuperci.out");
typedef long long ll;
int const MODULO = 666013;
vector <pair<ll, int>> sol[32];
int searchSol(int c, int group) {
for(int i = 0;i < sol[group].size();i++){
if(sol[group][i].first == c){
return i;
}
}
return -1;
}
ll solve(ll c) {
int group = c & 31;
int it = searchSol(c, group);
if(it != -1){
return sol[group][it].second;
}else {
ll ans = 0;
if(c <= 1){
ans = 1;
}else if(c % 2 == 1){
ll mult = solve((c - 1) / 2);
ans = (mult * mult) % MODULO;
}else {
ll mult1 = solve(c / 2 - 1), mult2 = solve(c / 2);
ans = (mult1 * mult2 * 2) % MODULO;
}
sol[group].push_back({c, ans});
return ans;
}
}
int main() {
int n;
in >> n;
for(int i = 1;i <= n;i++){
ll c;
in >> c;
out << solve(c) << '\n';
for(int j = 0;j <= 31;j++){
sol[j].clear();
}
}
return 0;
}