Pagini recente » Cod sursa (job #873181) | Cod sursa (job #1621868) | Cod sursa (job #960643) | Cod sursa (job #2849299) | Cod sursa (job #636368)
Cod sursa(job #636368)
#include <cstdio>
typedef long long i64;
struct str{i64 x,y;};
i64 v[75001];
inline str mp(i64 x,i64 y){str aux;aux.x=x;aux.y=y;return aux;}
str fct2(i64 x)
{
if (x<75001)
return mp(v[x],v[x-1]);
else
{
str aux=fct2(x>>1);
if (x&1)
return mp(2*aux.x*aux.y%666013,aux.y*aux.y%666013);
else
return mp(2*aux.x*aux.y%666013,aux.x*aux.x%666013);
}
}
i64 fct(i64 x)
{
if (x<75001)
return v[x];
else if (x&(x-1)==0)
return 1;
else if (x&1)
{
i64 aux=fct(x>>1);
return aux*aux%666013;
}
else
{
str aux=fct2(x>>1);
return 2*aux.x*aux.y%666013;
}
}
int main()
{
int t,i;
long long n;
freopen("ciuperci.in","r",stdin);
freopen("ciuperci.out","w",stdout);
scanf("%d",&t);
for (v[0]=1,v[1]=1,i=2;i<75001;++i)
if (i&1)
v[i]=(v[i>>1]*v[i>>1])%666013;
else
v[i]=(2*v[(i>>1)-1]*v[i>>1])%666013;
for (;t;--t)
{
scanf("%lld",&n);
printf("%lld\n",fct(n));
}
return 0;
}