Pagini recente » Cod sursa (job #255157) | Cod sursa (job #264307) | Cod sursa (job #913388) | Cod sursa (job #3265016) | Cod sursa (job #467607)
Cod sursa(job #467607)
#include <stdio.h>
#include <string.h>
#define lung 5000
int F[lung],doi[lung],R[lung],N;
int ax[lung];
void citire()
{
freopen("patrate2.in","r",stdin);
scanf("%d",&N);
fclose(stdin);
}
void inm(int *a,int b)
{
int t,i;
t=0;
for (i=1;i<=a[0];i++)
{
t = (a[i]= a[i]*b+t)/10;
a[i]%=10;
}
while (t)
{
a[++a[0]]=t%10;
t/=10;
}
}
void fact(int *a,int n)
{
int i;
a[1]=a[0]=1;
for (i=2;i<=n;i++)
inm(a,i);
}
void DlaN(int *a,int n)
{
int i;
a[0]=a[1]=1;
for (i=0;i<n;i++)
inm(a,2);
}
void inm(int *a,int *b,int *c)
{
int i,j;
for (i=1;i<=a[0];i++)
for (j=1;j<=b[0];j++)
c[i+j-1]+= a[i]*b[j];
c[0]=a[0]+b[0]+1;
unsigned long long t=0;
for (i=1;i<=c[0];i++)
{
t= (c[i]+=t)/10;
c[i]%=10;
}
while (!c[c[0]] && c[0]>1)
c[0]--;
}
int* rez()
{
fact(F,N);
DlaN(doi,N);
inm(F,doi,ax);
memset(doi,0,sizeof(doi));
DlaN(doi,N*N-N);
inm(ax,doi,R);
return R;
}
void scriere(int *a)
{
int i;
freopen("patrate2.out","w",stdout);
for (i=a[0];i;i--)
printf("%d",a[i]);
printf("\n");
fclose(stdout);
}
int main()
{
citire();
scriere(rez());
return 0;
}