Pagini recente » Cod sursa (job #571713) | Cod sursa (job #94221) | Cod sursa (job #3235637) | Cod sursa (job #458893) | Cod sursa (job #467615)
Cod sursa(job #467615)
#include <stdio.h>
#include <string.h>
#define lung 5000
typedef unsigned long long llu;
llu F[lung],doi[lung],R[lung],N;
int ax[lung];
void citire()
{
freopen("patrate2.in","r",stdin);
scanf("%d",&N);
fclose(stdin);
}
void inm(llu *a,long long b)
{
int i;
unsigned long long t=0;
for (i=1;i<=a[0];i++)
{
t = (a[i]= a[i]*(unsigned long long)b+t)/10;
a[i]%=10;
}
while (t)
{
a[++a[0]]=t%10;
t/=10;
}
}
void fact(llu *a,int n)
{
int i;
a[1]=a[0]=1;
for (i=2;i<=n;i++)
inm(a,i);
}
void DlaN(llu *a,int n)
{
int i;
a[0]=a[1]=1;
while (n>31)
inm(a,(long long)1<<31),
n-=31;
inm(a,1<<n);
/*for (i=0;i<n;i++)
inm(a,2);*/
}
void inm(llu *a,llu *b,llu *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]--;
}
llu* rez()
{
fact(F,N);
DlaN(doi,N*N);
inm(F,doi,R);
return R;
}
void scriere(llu *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;
}