Pagini recente » Cod sursa (job #367366) | Cod sursa (job #2457465) | Cod sursa (job #2860703) | Cod sursa (job #215656) | Cod sursa (job #168783)
Cod sursa(job #168783)
#include<cstdio>
#include<cstring>
const int baza=10000;
const int cif=2000;
int nr[cif+1],aux[cif+1],i,j,n,x;
inline void patrat()
{
memset(aux,0,sizeof(aux));
for(i=cif;i>=cif/2;i--)
for(j=cif;j>=cif/2;j--)
aux[i+j-cif]+=nr[i]*nr[j];
for(i=cif;i>0;i--){
aux[i-1]+=aux[i]/baza;
aux[i]%=baza;}
}
inline void inm(int a)
{
int i;
for(i=cif;i>=0;i--)
nr[i]*=a;
for(i=cif;i>0;i--){
nr[i-1]+=nr[i]/baza;
nr[i]%=baza;}
}
void pow(int n)
{
if(n==0) {
nr[cif]=1;
return;}
pow(n/2);
patrat();
memcpy(nr,aux,sizeof(nr));
if(n%2) inm(2);
}
void print()
{
i=0;
while(!nr[i]) i++;
printf("%d",nr[i]);
i++;
for(;i<=cif;i++){
j=baza/10;
while(j>1 && nr[i]/j==0) {printf("0");j/=10;}
printf("%d",nr[i]);}
printf("\n");
}
int main()
{
freopen("patrate2.in","r",stdin);
freopen("patrate2.out","w",stdout);
scanf("%d",&n);
pow(n*n);
for(i=2;i<=n;i++)
inm(i);
print();
}