Pagini recente » Cod sursa (job #1379645) | Cod sursa (job #1595797) | Cod sursa (job #2843615) | Cod sursa (job #2574467) | Cod sursa (job #177052)
Cod sursa(job #177052)
#include <stdio.h>
#include <string.h>
long n,i,j,p[2000],f[45],r,t;
long l,q,lmax,rez[2000],baza=10000;
long aux[2000],b[2000],lb;
void output(long x,long nr0){
if (x==0){printf("0000");return;}
if (rez[i]>x){
for (int j=0;j<nr0;j++)printf("0");
printf("%ld",rez[i]);
}
else output(x/10,nr0+1);
}
void putere(){
p[1]=1;l=1;
t=n*n;
b[1]=2;lb=1;
while(t){
if ((long)(t&1)==1){
memset(aux,0,2000*4-8);
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];
}
t>>=1;
memset(aux,0,2000*4-8);
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;
}
}
//printf("%ld\n",q);
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--)
output(baza/10,0);
printf("\n");
return 0;
}