Pagini recente » Cod sursa (job #810962) | Cod sursa (job #1988231) | Cod sursa (job #635763) | Cod sursa (job #2924415) | Cod sursa (job #635756)
Cod sursa(job #635756)
#include <stdio.h>
#include <algorithm>
#include <vector>
#define ll long long
#define MOD 666013
#define f first
#define s second
#define pb push_back
#define mp make_pair
using namespace std;
int t,r;
ll n;
vector < pair<ll,int> > A[33];
inline int find(ll n,int where)
{
int i;
for (i=0; i<A[where].size(); i++)
if (A[where][i].f==n)
return A[where][i].s;
return -1;
}
inline int calcul(ll n)
{
if (n==0)
return 1;
if (n==1)
return 1;
int nr=n & 31,act=find(n,nr);
if (act!=-1)
return act;
if (n % 2==1)
act=((ll)calcul(n/2)*calcul(n/2))%MOD;
else
act=((ll)calcul(n/2)*calcul(n/2-1)*2)%MOD;
A[nr].pb(mp(n,act));
return act;
}
void sterge()
{
int i;
for (i=0; i<=31; i++)
A[i].clear();
}
int main()
{
freopen("ciuperci.in","r",stdin);
freopen("ciuperci.out","w",stdout);
scanf("%d",&t);
while (t--)
{
scanf("%lld",&n);
r=0;
printf("%d\n",calcul(n));
sterge();
}
return 0;
}