Pagini recente » Cod sursa (job #1723886) | Cod sursa (job #21841) | Cod sursa (job #184736) | Cod sursa (job #2110680) | Cod sursa (job #1877641)
#include<fstream>
using namespace std;
#define Nmax 200005
#define mod 666013
ifstream fin("permheap.in");
ofstream fout("permheap.out");
int n,i;
int d[Nmax],nr[Nmax],x,y,t,x1,y1;
int fact(int n){
int p=1;
for(int i=2;i<=n;i++)
p=(1ll*p*i)%mod;
return p;
}
void invers(int a, int b, int &x, int &y)
{
if(b==0){
x=1;y=0;
}
else{
int x0,y0;
invers(b,a%b,x0,y0);
x=y0;
y=x0-(a/b)*y0;
}
}
int main(){
fin>>n;
for(i=n;i>=1;i--){
if(2*i>n)
d[i]=1,nr[i]=1;
else
if(2*i+1>n)
d[i]=d[2*i],nr[i]=nr[2*i]+1;
else
{
nr[i]=nr[2*i]+nr[2*i+1]+1
;
d[i]=(1ll*d[2*i]*d[2*i+1])%mod;
y=nr[2*i];
x=y+nr[2*i+1];
d[i]=(d[i]*fact(x))%mod;
t=(1ll*fact(y)*fact(x-y))%mod;
invers(t,mod,x1,y1);
if(x1<0)
x1=mod+x1%mod;
d[i]=(d[i]*x1)%mod;
}
}
fout<<d[1];
return 0;
}