Pagini recente » Cod sursa (job #1686534) | Cod sursa (job #484823) | Cod sursa (job #1354501) | Cod sursa (job #1888221) | Cod sursa (job #637587)
Cod sursa(job #637587)
#include <iostream>
#include <fstream>
using namespace std;
ifstream in ("ciuperci.in");
ofstream out ("ciuperci.out");
int k;
long long rez=1;
long long putere(long long n)
{
long long i;
k=0;
for(i=1;i*2-1<=n;i*=2)
{
k++;
}
return i-1;
}
int putere2(long long k)
{
int x;
if(k==0)
return 1;
if(k%2==0)
{
x=putere2(k/2);
return (((long long) x)* x)%666013;
}
x=putere2(k/2);
//out<<x<<" ";
return (((long long)(((long long) x*x)%666013)*2))%666013;
}
int putere3(int n, long long k)
{
int x;
if(k==0)
return 1;
if(k%2==0)
{
x=putere3(n,k/2);
return ((((long long) x)*x)%666013);
}
x=putere3(n,k/2);
return (((long long) (((long long) x*x)%666013))*n)%666013;
}
void arbore(long long p, long long nrp, long long ip, long long nrip, int niv)
{
long long par=0,impar=0;
long long nrpar=0,nrimpar=0;
int a,b;
if(p==0 && ip==1)
{
a=putere2(k-niv+1);
b=putere3(a,nrip);
rez=(((long long) b)*rez)%666013;
return;
}
if((p/2)%2==0)
{
par=p/2;
nrpar=nrp*2;
}
else
{
impar=p/2;
nrimpar=nrp*2;
}
if(nrip!=0)
{
if((ip/2)%2==0)
{
impar=ip/2+1;
nrimpar+=nrip;
par=ip/2;
nrpar+=nrip;
}
else
{
impar=ip/2;
nrimpar+=nrip;
par=ip/2+1;
nrpar+=nrip;
}
}
a=putere2(nrip);
rez=(((long long) a)*rez)%666013;
arbore(par,nrpar,impar,nrimpar,niv+1);
//out<<a<<" "<<rez<<" "<<niv<<"\n";
return;
}
int main()
{
int t,i;
long long n, m;
in>>t;
for(i=1;i<=t;++i)
{
in>>n;
m=n-putere(n);
if(m==0)
{
out<<"1\n";
continue;
}
if(m%2==0)
arbore(m,1,0,0,1);
else
arbore(0,0,m,1,1);
}
out<<rez<<"\n";
return 0;
}