Pagini recente » Cod sursa (job #1791720) | Cod sursa (job #1925664) | Cod sursa (job #331520) | Cod sursa (job #2187130) | Cod sursa (job #177066)
Cod sursa(job #177066)
#include <stdio.h>
#include <string.h>
#define Lmax 10000
long n,i,j,p[Lmax],f[1000],r,t;
long l,q,lmax,rez[Lmax],baza=10;
long aux[Lmax],b[Lmax],lb;
void putere(){
p[1]=1;l=1;
t=n*n;
b[1]=2;lb=1;
while(t){
if ((long)(t&1)==1){
for (i=1;i<Lmax;++i)aux[i]=0;
for (i=1;i<=l;i++)
for (j=1;j<=lb;j++)
aux[i+j-1]+=p[i]*b[j];
l+=lb-1;
for (i=1;i<=l;i++){
aux[i+1]+=aux[i]/baza;
aux[i]%=baza;
}
r=aux[l+1];
while (r){
l++;
aux[l]=r%baza;
r/=baza;
}
for (i=1;i<=l;++i)p[i]=aux[i];
}
//printf("%ld %ld\n",l,lb);
t>>=1;
for (i=1;i<Lmax;++i)aux[i]=0;
for (i=1;i<=lb;i++)
for (j=1;j<=lb;j++)
aux[i+j-1]+=b[i]*b[j];
lb+=lb-1;
for (i=1;i<=lb;i++){
aux[i+1]+=aux[i]/baza;
aux[i]%=baza;
}
r=aux[lb+1];
while (r){
lb++;
aux[lb]=r%baza;
r/=baza;
}
for (i=1;i<=lb;++i)b[i]=aux[i];
}
}
int main(){
freopen ("patrate2.in","r",stdin);
freopen ("patrate2.out","w",stdout);
scanf ("%ld",&n);
putere();
f[1]=1;q=1;
for (i=2;i<=n;i++){
r=0;
for (j=1;j<=q;j++){
f[j]=f[j]*i+r;
r=f[j]/baza;
f[j]-=r*baza;
}
while (r){
q++;
f[q]=r%baza;
r/=baza;
}
}
for (i=1;i<=l;i++)
for (j=1;j<=q;j++){
rez[i-1+j]+=p[i]*f[j];
}
lmax=l+q-1;
for (i=1;i<=lmax;i++){
rez[i+1]+=rez[i]/baza;
rez[i]%=baza;
}
r=rez[lmax+1];
while (r){
lmax++;
rez[lmax]=r%baza;
r/=baza;
}
printf("%ld",rez[lmax]);
for (i=lmax-1;i;i--)
printf("%ld",rez[i]);
printf("\n");
return 0;
}