Pagini recente » Cod sursa (job #2687151) | Cod sursa (job #1860539) | Cod sursa (job #2178031) | Cod sursa (job #1839382) | Cod sursa (job #636994)
Cod sursa(job #636994)
#include <fstream>
#include <vector>
using namespace std;
#define MOD 666013
#define DIM 64
vector <pair <long long,int> > h[DIM];
long long N;
int T;
inline int find (long long nr,int poz)
{
for (vector <pair <long long,int> > :: iterator it=h[poz].begin (); it!=h[poz].end (); ++it)
if (it->first==nr)
return it->second;
return 0;
}
int solve (long long nr)
{
if (nr==0 || nr==1)
return 1;
int rez=find (nr,nr&63);
if (!rez)
{
rez=solve (nr>>1);
if (nr&1)
rez=(1LL*rez*rez)%MOD;
else
rez=(2LL*rez*solve ((nr>>1)-1))%MOD;
h[nr&63].push_back (make_pair (nr,rez));
}
return rez;
}
int main ()
{
ifstream fin ("ciuperci.in");
ofstream fout ("ciuperci.out");
fin>>T;
for (int i=0; i<T; ++i)
{
fin>>N;
for (int j=0; j<DIM; ++j)
h[j].clear ();
fout<<solve (N)<<"\n";
}
return 0;
}